Array von ImageButtons, weisen R.view.id von einer variablen
-
30-09-2019 - |
Frage
Hey. Meine app wird ein Array von 64 ImageButtons (8x8) zu verwenden, und sie sind alle bereits in meiner XML-Layout mit Namen wie one1, two5 erklärt, eight8 usw. Anstatt declare diese jeweils einzeln in meinem Java Ich dachte, es könnte klug sein, sie alle in einigen for-Schleife zu erklären. Ich habe
ImageButton musicGrid[][] = new ImageButton [8][8];
Dann habe ich meine for-Schleifen verschachtelt, die im Grunde eine Zeichenfolge erstellen, die anstelle von R.id.whatever sein werden. Es ist nur so, dass letzte Zeile in meinem Schleifen, das sollte die Zuordnung tun. Was wäre die richtige Syntax für das, oder ist dies auch gar nicht möglich zu tun (und wenn ja, wie besser würde ich ein 64-Taste Gitter Griff?). Dank!
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);
}
}
Lösung
Ich mag AndrewKS‘for
, es ist eleganter. Denken Sie daran, dass findViewById
eine ganze Zahl eher als ein String erhält. Sie werden also wie etwas zu tun haben:
int resID = getResources().getIdentifier(btnID, "drawable", "com.your.package");
musicGrid[i][j] = (ImageButton) findViewById(resID);
Andere Tipps
Wenn Sie nicht bereits die Schaltflächen in der xml hart codieren, hätte ich gesagt, es mit einem ViewInflater programmatisch zu tun, aber da man hier hat der 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));
}
}