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);
        }
    }
War es hilfreich?

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

Es sei denn, dass eine spezifische Notwendigkeit ist es als einzelne ImageButtons zu tun, könnten Sie besser dran, eine Grid .

Hier ist ein Tutorial mit Bildern in einem Gridview mit ein Adapter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top