9

嘿。我的应用程序将使用 64 个 ImageButtons (8x8) 的数组,它们都已经在我的 XML 布局中声明,名称如 one1、two5、88 等。我认为不是在我的 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);
        }
    }
4

3 回答 3

8

我喜欢 AndrewKS' for,它更优雅。请记住,findViewById接收整数而不是字符串。因此,您将不得不执行以下操作:

int resID = getResources().getIdentifier(btnID, "drawable", "com.your.package");
musicGrid[i][j] = (ImageButton) findViewById(resID);
于 2010-10-14T20:05:15.433 回答
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));
  }
}
于 2010-10-14T20:02:49.133 回答
0

除非有特殊需要将其作为单独的 ImageButtons 执行,否则最好使用GridView

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

于 2010-10-14T20:19:47.417 回答