Array of ImageButtons, assign R.view.id from a variable
Hey there. My app is going to be using an array of 64 ImageButtons (8x8), and they're all already declared in my XML Layout with names like one1, two5, eight8, etc. Rather than declare these each individually in my Java I thought it might be smart to declare them all in some for loops. I have
ImageButton musicGrid[][] = new ImageButton [8][8];
Then I have my nested for loops that basically create a string that will be in place of R.id.whatever. It's just that last line in my loops, that is supposed to do the assigning. What would the correct syntax for that be, or is this not even possible to do (and if so, how better would I handle a 64 button grid?). Thanks!
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);
}
}
I like AndrewKS' for
, it's more elegant. Just keep in mind that findViewById
receives an integer rather than a String. So you will have to do something like:
int resID = getResources().getIdentifier(btnID, "drawable", "com.your.package");
musicGrid[i][j] = (ImageButton) findViewById(resID);
If you didn't already hardcode the buttons in the xml, I would have said to do it programmatically with a ViewInflater, but since you did here's the code:
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));
}
}
Unless there's some specific need to do it as individual ImageButtons, you might be better off using a GridView.
Here is a tutorial using images in a GridView using an adapter.
精彩评论