Массив ImageButtons, назначить R.view.id из переменной - PullRequest
9 голосов
/ 14 октября 2010

Привет.Мое приложение будет использовать массив из 64 ImageButtons (8x8), и все они уже объявлены в моем XML-макете с именами, такими как one1, two5, eight8 и т. Д. Вместо того, чтобы объявлять их по отдельности в моей Java, я подумал, что этоможет быть разумно объявить их все в некоторых циклах.У меня есть

ImageButton musicGrid[][] = new ImageButton [8][8];

Тогда у меня есть вложенные циклы for, которые в основном создают строку, которая будет вместо R.id.whither.Это просто последняя строка в моих циклах, которая должна выполнять присваивание.Каков будет правильный синтаксис для этого, или это даже невозможно сделать (и если так, как лучше я бы обработал сетку из 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);
        }
    }

Ответы [ 3 ]

8 голосов
/ 15 октября 2010

Мне нравится AndrewKS 'for, это более элегантно.Просто имейте в виду, что findViewById получает целое число, а не строку.Так что вам придется сделать что-то вроде:

int resID = getResources().getIdentifier(btnID, "drawable", "com.your.package");
musicGrid[i][j] = (ImageButton) findViewById(resID);
2 голосов
/ 15 октября 2010

Если вы еще не жестко закодировали кнопки в 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));
  }
}
0 голосов
/ 15 октября 2010

Если нет особой необходимости делать это как отдельные кнопки ImageButtons, вам может быть лучше использовать GridView .

Здесь - это учебник, использующий изображения вGridView с использованием адаптера.

...