与findViewById()混淆

时间:2015-11-10 23:16:35

标签: android android-layout

我正在尝试以编程方式在现有RelativeLayout中添加LinearLayouts。每个LinearLayout都包含一些按钮,我希望能够通过设置容器LinearLayout的可见性来切换每组按钮的可见性。

// We iterate over a list and call the following to create the new
// layout assigning an index from a int counter
LinearLayout LL = new LinearLayout(MainActivity.this);
LL.setOrientation(LinearLayout.VERTICAL);
LL.setId(nextId);

LinearLayout.LayoutParams LLParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

LL.setWeightSum(6f);
LL.setLayoutParams(LLParams);

LinearLayout mll=((LinearLayout) findViewById(R.id.menuLayout));
mll.addView(LL);

我的问题出现在我稍后尝试检索这些布局时,例如能够打开/关闭其可见性。我以为我可以使用

LinearLayout ll = (LinearLayout) findViewById(layoutIndex);

但是当我尝试提供一个int时,findViewById()给了我一个错误,它需要一个资源ID。有没有一种简单的方法可以将我已经指定为这些布局的ID的整数转换为R.id.XXX ID?

谢谢, 安迪

2 个答案:

答案 0 :(得分:1)

findViewById(id)查找作为定义布局的XML的一部分而包含的元素。

getChildAt(index)可能会更好运,它会在传递的索引处返回View。

答案 1 :(得分:0)

是的!在不使用ID的情况下查找容器中的所有LinearLayout

LinearLayout mll= (LinearLayout) findViewById(R.id.menuLayout);//container

 for(int i=0; i<mll.getChildCount(); ++i) {
     View nextChild = mll.getChildAt(i);
     if (nextChild instanceof LinearLayout ) {
         //TODO add your code here nextChild is a LL that you wanna find
     }
 }