2012-05-16 109 views
0

View leader,我不知道是什么,第二个参数应该是的Android tablelayout麻烦,加上我有麻烦意见

 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

回答

1

这里一个LinearLayout中对视图构造的开发者页面:如果您

https://developer.android.com/reference/android/view/View.html#View%28android.content.Context%29

的角度对第二和第三个参数用于希望此视图在创建该视图时设置某些属性或样式。

它看起来像你实际上想要你的变量leader被夸大。这将采用xml定义的布局,并将其分配给动态创建的视图。你说你的leaderLayout是一个LinearLayout,所以它看起来像这样。

//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。第二个是ViewGroup,它将成为你的虚拟View的父代。完成此操作后,您可以使用Leader上的findViewById来获取Xml文件中的子视图,动态添加更多子项并将其添加为TableRow的子项。

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

http://developer.android.com/reference/android/view/LayoutInflater.html

+0

我有一个新的错误,现在,这里是我真的triyng做http://codepad.org/3c4NNFlY,在addView失败'05-16 13 for循环的第二次:34:05.143:E/AndroidRuntime(855):java.lang.IllegalStateException:指定的子项已经有父项。您必须先调用子对象的父对象的removeView()。 '我想这绝不会是一个问题,因为所有视图都是唯一的,并且在for循环的每一遍都创建。 – CQM

+1

“膨胀”方法的第二个参数是膨胀视图的父级。由于视图不能是多个父项的子项,因此您在“addView”上发生错误,因为父项已被设置。如果您将tr作为参数传递,则应该自动添加而不需要addView。或者,您可以只用第一个参数调用充气,布局文件,然后按照原样调用addView。 – MattDavis