我需要创建一系列对象,它现在看起来很丑陋:
CheckBox checkOne = (CheckBox) findViewById(R.id.checkOne);
CheckBox checkTwo = (CheckBox) findViewById(R.id.checkTwo;
CheckBox checkThree = (CheckBox) findViewById(R.id.checkThree);
CheckBox checkFour = (CheckBox) findViewById(R.id.checkFour);
CheckBox checkFive = (CheckBox) findViewById(R.id.checkFive);
我在Java方面处于中间水平,所以我想做的是做一个for循环,然后使用变量变量。唉,Java不支持这个。是否有任何,更少递归的方式来做到这一点?
答案 0 :(得分:5)
假设查找键是整数,你可以这样做:
CheckBox[] boxes = new CheckBox[5];
int[] ids = new int[]{R.id.checkOne, R.id.checkTwo, R.id.checkThree,
R.id.checkFour, R.id.checkFive};
for (int i=0; i<5; i++) {
boxes[i] = (CheckBox) findViewById(ids[i])
}
如果键是其他键,您当然需要更改ids
数组的类型。
如果您可以控制R
类中这些键的保存方式,那么最好将它们设置为数组。
使用Lists而不是数组也可能会更好。
答案 1 :(得分:3)
CheckBox[] boxes = new CheckBox[]{(CheckBox) findViewById(R.id.checkOne),
(CheckBox) findViewById(R.id.checkTwo), ...};
您可以初始化此类数组或int数组,并在此数组上迭代for
循环。
答案 2 :(得分:1)
如果checkOne,checkTwo等是R.id上的字段,那么迭代它们的唯一方法是使用反射。这不是很优雅,但这是你必须在java中处理它的方式。
List<CheckBox> boxes = new ArrayList<CheckBox>();
for(Field f : R.id.getClass().getFields()) {
if(f.getName().startsWith("check")) {
boxes.add((CheckBox) findViewById(f.get(R.id)));
}
}
答案 3 :(得分:0)
如果您希望通过id-name字符串变量获取复选框,请将复选框命名为checkbox1
,checkbox2
等,并以这种方式访问它们:
String view_name = "";
CheckBox[] boxes = new CheckBox[5];
Integer x=0, y;
for (x=0;x<5;x++){
y=x+1;
view_name = "checkbox"+ y.toString();
boxes[x] = (CheckBox) findViewById(getResources().getIdentifier(view_name,"id", getPackageName()));
}