如果我有太多复选框(超过50个),有没有办法可以使用复选框的映射,里面的循环?以及如何在findViewById(int)中分配int。
像这样: - (复选框数组)
for(int i=0 ; i<=99; i++)
checks[i] = (CheckBox)findViewById(what-about-this-int-id);
答案 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已创建)。