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