我可以把它放到for循环中吗?

时间:2011-09-26 18:44:10

标签: java android eclipse for-loop r.java-file

  

可能重复:
  android: how to elegantly set many button IDs

这是一个用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);

3 个答案:

答案 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;
    }
}