我的活动中有很多按钮(一次只能看到其中的一部分)。我现在有这样丑陋的东西:
buttonID[0] = R.id.buttonr1b1;
buttonID[1] = R.id.buttonr1b2;
buttonID[2] = R.id.buttonr1b3;
buttonID[3] = R.id.buttonr1b4;
...
buttonID[35] = R.id.buttonr1b36;
for (int i = 0; i < 36; i++) {
button[i] = (Button) findViewById(buttonID[i]);
}
是否有更优雅的方式来引用所有R.id.buttonXXX?它只是看起来如此错误和丑陋。 谢谢。
答案 0 :(得分:2)
你的直觉是正确的。这很丑陋,如果你发现自己想要这样做,你应该重新考虑你的设计。
如果你的按钮是统一的,你想要循环它们以做这样的事情,它们可能是统一的,可以首先以编程方式生成(并且你可以在创建时存储引用)或使用某种形式的AdapterView
。每个按钮需要关联哪些数据?你能用setTag / getTag直接关联吗?你需要在这里使用ID吗?
答案 1 :(得分:1)
我不确定这是否更优雅或更不优雅,因为您将丢失编译时检查您的ID。但是,您可以按名称构建ID:
final static String PREFIX = "buttonr1b";
...
Resources res = getResources();
for (int i = 0; i < 36; i++) {
int resID = res.getIdentifier(PREFIX + i , "id", getPackageName());
button[i] = (Button) findViewById(resID);
}
注意:确保“getPackageName()”将返回R类的相应包,否则请明确指定它。