ImageButtons数组,从变量中分配R.view.id

时间:2010-10-14 19:57:11

标签: android arrays imagebutton

嘿那里。我的应用程序将使用64个ImageButtons(8x8)的数组,并且它们都已在我的XML布局中声明,其名称类似于one1,two5,eight8等。而不是在我的Java中单独声明它们我认为它可能很聪明地在一些for循环中声明它们。我有

ImageButton musicGrid[][] = new ImageButton [8][8];

然后我有我的嵌套for循环,它基本上创建了一个代替R.id.whatever的字符串。它只是我循环中的最后一行,应该进行分配。它的正确语法是什么,或者甚至不可能做到(如果是这样,我将如何更好地处理64按钮网格?)。谢谢!

for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            String btnID = "R.id.";
            switch(i) {
            case 0: btnID.concat("one"); break;
            case 1: btnID.concat("two"); break;
            case 2: btnID.concat("three"); break;
            case 3: btnID.concat("four"); break;
            case 4: btnID.concat("five"); break;
            case 5: btnID.concat("six"); break;
            case 6: btnID.concat("seven"); break;
            case 7: btnID.concat("eight"); break;
            }
            switch(j) {
            case 0: btnID.concat("1"); break;
            case 1: btnID.concat("2"); break;
            case 2: btnID.concat("3"); break;
            case 3: btnID.concat("4"); break;
            case 4: btnID.concat("5"); break;
            case 5: btnID.concat("6"); break;
            case 6: btnID.concat("7"); break;
            case 7: btnID.concat("8"); break;
            }
            musicGrid[i][j] = (ImageButton) findViewById(btnID);
        }
    }

3 个答案:

答案 0 :(得分:8)

我喜欢AndrewKS'for,它更优雅。请记住,findViewById接收整数而不是字符串。所以你必须做类似的事情:

int resID = getResources().getIdentifier(btnID, "drawable", "com.your.package");
musicGrid[i][j] = (ImageButton) findViewById(resID);

答案 1 :(得分:2)

如果您还没有对xml中的按钮进行硬编码,我会说使用ViewInflater以编程方式执行此操作,但是因为您在这里执行了代码:

String[] number_as_word = ["one", "two", "three", "four", "five", "six", "seven", "eight"];
for (int i = 0; i < 8; i++) {
  for (int j = 0; j < 8; j++) {
    musicGrid[i][j] = (ImageButton) findViewById("R.id." + number_as_word[i] + (j+1));
  }
}

答案 2 :(得分:0)

除非有特定的需要将其作为单独的ImageButton进行,否则最好使用GridView

Here是一个使用适配器在GridView中使用图像的教程。