这是一个用eclipse制作的android程序。我尝试在imageButton1的位置使用字符串连接无效。 R是生成的类,所以我不能进入它并编辑它,以便imageButtons是数组的一部分。 如何将其置于for循环中?
seatButton[0] = (ImageButton) findViewById(R.id.imageButton1);
seatButton[1] = (ImageButton) findViewById(R.id.imageButton2);
seatButton[2] = (ImageButton) findViewById(R.id.imageButton3);
seatButton[3] = (ImageButton) findViewById(R.id.imageButton4);
seatButton[4] = (ImageButton) findViewById(R.id.imageButton5);
seatButton[5] = (ImageButton) findViewById(R.id.imageButton6);
seatButton[6] = (ImageButton) findViewById(R.id.imageButton7);
seatButton[7] = (ImageButton) findViewById(R.id.imageButton8);
seatButton[8] = (ImageButton) findViewById(R.id.imageButton9);
seatButton[9] = (ImageButton) findViewById(R.id.imageButton10);
答案 0 :(得分:5)
你可以,一种方法如下:
ImageButton[] btns = {R.id.imageButton1, R.id.imageButton2, ..., R.id.imageButton10};
for(int i = 0, len = btns.length; i < len; i++) {
seatButton[i] = (ImageButton) findByViewId(btns[i]);
}
答案 1 :(得分:3)
您还可以使用getResources().getIdentifier(String name, String defType, String defPackage)
,其中name是资源名称,defType是可绘制的,defPackage是您的完整包名称。
这会产生类似的结果:
for (int i = 0; i < 10; i++) { int resId = getResources().getIdentifier("imageButton" + (i + 1), "id", your_package"); seatButton[i] = (ImageButton) findViewById(resId); }
答案 2 :(得分:0)
我对你的应用程序或android没有任何了解,但是你可以使用运行时反射(尽管如果你可以避免使用它,我认为不应该使用它。)
import java.lang.reflect.Field;
...
for(int i=1; ; i++) {
try {
Field f = R.id.getClass().getField("imageButton" + i);
seatButton[i-1] = (ImageButton) findByViewId(f.get(R.id)); // Add cast to whatever type R.id.imageButton<i> is
} catch (Exception e) {
break;
}
}