android桌面布局问题,添加视图

android桌面布局问题,添加视图,android,xml,view,android-linearlayout,tablelayout,Android,Xml,View,Android Linearlayout,Tablelayout,我在查看引线时遇到问题,我不确定第二个参数应该是什么 TableLayout leaderTable = (TableLayout)findViewById(R.id.leaderTable); TableRow tr = new TableRow(this); tr.setId(i); tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT

我在查看引线时遇到问题,我不确定第二个参数应该是什么

        TableLayout leaderTable = (TableLayout)findViewById(R.id.leaderTable);            

        TableRow tr = new TableRow(this);
        tr.setId(i);
        tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

        View leader = new View(UserView.this, null, R.id.leaderLayout);

        TextView number = (TextView)leader.findViewById(R.id.numberView);
        number.setText(String.valueOf(i+1));

        tr.addView(leader);

        leaderTable.addView(tr);
问题是我的
TextView
为空,尽管它是
leader的子视图。

对这个问题相当困惑,这是我的XML

<TableLayout 
                 android:id="@+id/leaderTable"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center">

            </TableLayout>

我需要对XML做更多的工作吗?我不需要在其中包含表格行,是吗


R.id.leaderLayout
是它自己的xml文件,一个具有该id的线性布局

以下是视图构造函数的开发人员页面:

如果希望该视图在创建该视图时设置某些属性或样式,则使用该视图的第二个和第三个参数

看起来您实际上希望变量
leader
膨胀。这将采用xml中定义的布局,并将其分配给动态创建的视图。你说过你的领导层布局是线性布局,所以看起来像这样

//Initialize the layout inflator, do this once and use it to inflate as many views as you want
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

//Assign your custom view to the variable leader
LinearLayout leader = (LinearLayout) inflator.inflate(R.layout.leaderLayout, tr); 
充气的第一个参数是R.layout.nameOfYourXmlFile。第二个是视图组,它将是膨胀视图的父视图。完成此操作后,您可以使用leader上的
findViewById
获取Xml文件中的子视图,动态添加更多子视图,并将其添加为TableRow的子视图


这里是LayoutInflator的开发者页面,以防您对
inflate
方法的其他用法感到好奇


我现在有一个新错误,下面是我真正需要做的事情,在forloop的第二次传递中,addView失败了
05-16 13:34:05.143:E/AndroidRuntime(855):java.lang.IllegalStateException:指定的子级已经有父级。必须首先对子级的父级调用removeView()
我认为这永远不会是问题,因为所有视图都是唯一的,并且在循环的每次传递时都会创建,因为方法
inflate
的第二个参数是inflated视图的父级。由于视图不能是多个父视图的子视图,因此在
addView
上会出现错误,因为父视图已设置。如果您将tr作为参数传递,则应自动添加它,而无需addView。或者,您可以仅使用第一个参数即布局文件调用inflate,并按原样调用addView。