java - Android在fragment中动态创建textview

标签 java android dynamic textview fragment

我的 Android 应用程序出现问题,无法实现我想要的功能。

我正在尝试在 fragment 中动态创建 TextViews。但不知怎的,我无法编写代码来工作。

所以让我们从我的 fragment 打开 Activity 开始:

    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_auftrage) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.root_layout, auftrage.newInstance())
                    .addToBackStack(null)
                    .commit();
        } else if (id == R.id.nav_benutzer) {

        } else if (id == R.id.nav_arbeitsplan) {

        } else if (id == R.id.nav_manage) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

转发的请求将转到此 java 文件。正如你将看到的,我尝试了一些结果却很糟糕......

package com.example.fabian.myapplication.Tabellen;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;


import com.example.fabian.myapplication.DataBaseConnection;
import com.example.fabian.myapplication.MainActivity;
import com.example.fabian.myapplication.R;


public class auftrage extends Fragment {

    public static auftrage newInstance() {
        return new auftrage();
    }

    public void auftrage(){
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
super.onCreateView(inflater,container,savedInstanceState);
        final View view = inflater.inflate(R.layout.auftrage, container, false);


        Button btnA = (Button) view.findViewById(R.id.buttonAuf);
        btnA.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                RelativeLayout rl;
                TextView tv1, tv2, tv3;

                rl = (RelativeLayout) view.findViewById(R.id.rl_auftrage);

                tv1 = new TextView (view.getContext());
                tv2 = new TextView (view.getContext());
                tv3 = new TextView (view.getContext());

                tv1.setText("Dynamic TedgfhdfhdghdfghdfghfdghfghddgfhdfhgdxtView");
                tv2.setText("Javhgfdfghdfghfgdhdhgdghdfghdgdfghdfghdfghdfgha");
                tv3.setText("Andrfdghdfghdfghdghdgfhgfdhdfghgdfhdgfhdgfhdgfhoid");

                tv1.setTextColor(Color.RED);
                tv2.setTextColor(Color.MAGENTA);
                tv3.setTextColor(Color.BLUE);

                tv1.setTextSize(40);
                tv2.setTextSize(40);
                tv3.setTextSize(40);

                RelativeLayout.LayoutParams params1=new RelativeLayout.LayoutParams
                        ((int) ViewGroup.LayoutParams.WRAP_CONTENT,(int) ViewGroup.LayoutParams.WRAP_CONTENT);
                params1.leftMargin=200;
                params1.topMargin=200;

                RelativeLayout.LayoutParams params2=new RelativeLayout.LayoutParams
                        ((int) ViewGroup.LayoutParams.WRAP_CONTENT,(int) ViewGroup.LayoutParams.WRAP_CONTENT);
                params2.leftMargin=400;
                params2.topMargin=400;

                RelativeLayout.LayoutParams params3=new RelativeLayout.LayoutParams
                        ((int) ViewGroup.LayoutParams.WRAP_CONTENT,(int) ViewGroup.LayoutParams.WRAP_CONTENT);
                params3.leftMargin=600;
                params3.topMargin=600;

                tv1.setLayoutParams(params1);
                tv2.setLayoutParams(params2);
                tv3.setLayoutParams(params3);

                rl.addView(tv1);
                rl.addView(tv2);
                rl.addView(tv3);

                //String[] IDs = DataBaseConnection.IDAuslesen();
                String[] IDs = {"test 1 ", "nochspwas", "swi"};

                for (String ID: IDs){
                    TextView product = new TextView(getActivity().getApplicationContext());
                    product.setText(ID);
                    //ll.addView(product);

                    //CheckBox cb = (CheckBox) view.findViewById(R.id.checkBoxX);
                    //cb.setText(cb.getText().toString() + ID + "   ");
                    //TODO beim öffnen dann eigenschaften anzeigen
                }


            }
        });

        btnA.setText("klappt");


        return view;

    }

}

最后一个是 fragment 的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl_auftrage"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/buttonAuf"
        android:layout_gravity="center_vertical"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

我真的希望你能帮我解决这个问题!我认为这只是让代码工作的一点点,但不知何故我找不到它:(

提前致谢!

最佳答案

您应该使用LinearLayout动态生成它,但如果您确实想要RelativeLayout

在您的 fragment 中:

 RelativeLayout layout = (RelativeLayout)findViewById(R.id.auftrage);
 final TextView textView = new TextView(this);
 textView.setText("Text ");     


 int curTextViewId =  2;//or some id number
 textView.setId(curTextViewId);
 final RelativeLayout.LayoutParams params = 
            new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, 
                                            RelativeLayout.LayoutParams.WRAP_CONTENT);

 params.addRule(RelativeLayout.BELOW, prevTextViewId);
 textView.setLayoutParams(params);

 layout.addView(textView, params);

关于java - Android在fragment中动态创建textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37153964/

相关文章:

java.util.log,使用 3 个不同的记录器实例/日志文件,获取 .1 .2 等

java - Netty 与 Apache MINA

java - NetBeans 中的无效部署描述符错误

java - 程序集插件无法复制 Java 运行时镜像

android - 使用导航架构组件在 fragment 中显示备份/备份确认

c - 是否有另一种方法可以在 C 中释放动态分配的内存 - 不使用 free() 函数?

python - 如何在Python中通过名称更改变量?

java - 如何在方法之间正确传递上下文以使用数据库存储库?

android - 哪种方法最适合C程序在Android中运行

c++ - 使用 gnuplot 动态绘制 volatile 数据文件