在for循环中使用findViewById()来获取多个复选框

时间:2015-05-14 02:42:38

标签: android for-loop checkbox findviewbyid

如果我有太多复选框(超过50个),有没有办法可以使用复选框的映射,里面的循环?以及如何在findViewById(int)中分配int。

像这样: - (复选框数组)

for(int i=0 ; i<=99; i++)
checks[i] = (CheckBox)findViewById(what-about-this-int-id);

4 个答案:

答案 0 :(得分:2)

您也可以使用getResources().getIdentifier(..)动态查找资源ID: https://stackoverflow.com/a/14058142/1715829

答案 1 :(得分:0)

如果你有一个容器元素,其中所有这些复选框都存在,那么你可以通过将它转换为ViewGroup来获取所有复选框子元素

ViewGroup container = (ViewGroup)findViewById(R.id.container);
for (int i = 0; i < container.getChildCount(); i++){
   CheckBox cb = (CheckBox)container.getChildAt(i);
   // attach  listener etc    
}

答案 2 :(得分:0)

我知道你可能找到了你的解决方案,但万一其他人找不到合适的解决方案,我会在这里发帖。

假设您将“findViewById”标记为:

<CheckBox
    android:id="@+id/checkbox0"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:padding="5dip"/>

<CheckBox
    android:id="@+id/checkbox1"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:padding="5dip"/>
      .
      .
      .
<CheckBox
    android:id="@+id/checkbox50"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:padding="5dip"/>

您可以使用几行代替“findViewById”来执行此类操作 写50“findViewById”行:

CheckBox[] cb = new CheckBox[51];
for (int i = 0; i < 51; i++) {
        String idCheckBox = "checkbox"+i;
        cb[i] = (CheckBox) findViewById(YourActivity.this.getResources().getIdentifier(idCheckBox, "id", getPackageName()));
    }

其中“YourActivity.this”指的是上下文。

答案 3 :(得分:0)

1)50多个复选框有什么用?

如果您有一个带复选框的列表,则应使用ViewHolder存储有关每行的信息。

2)每次需要物品时尽量避免使用findViewById。

findViewById是一项昂贵的操作,因此您应该缓存项目(为此目的,ViewHolder已创建)。