2014-11-10 1 views
0

Я 50 Buttons закодированных как это:Перебор многочисленных переменных Button

button_list.set(0,(Button) findViewById(R.id.button0)); 
button_list.set(1,(Button) findViewById(R.id.button1)); 
button_list.set(2,(Button) findViewById(R.id.button2)); 
button_list.set(3,(Button) findViewById(R.id.button3)); 
button_list.set(4,(Button) findViewById(R.id.button4)); 
button_list.set(5,(Button) findViewById(R.id.button5)); 
button_list.set(6,(Button) findViewById(R.id.button6)); 
button_list.set(7,(Button) findViewById(R.id.button7)); 
button_list.set(8,(Button) findViewById(R.id.button8)); 
button_list.set(9,(Button) findViewById(R.id.button9)); 
button_list.set(10,(Button) findViewById(R.id.button10)); 
button_list.set(11,(Button) findViewById(R.id.button11)); 
button_list.set(12,(Button) findViewById(R.id.button12)); 
button_list.set(13,(Button) findViewById(R.id.button13)); 
button_list.set(14,(Button) findViewById(R.id.button14)); 
button_list.set(15,(Button) findViewById(R.id.button15)); 
. 
. 
. 

Как я могу положить все это в цикле?

Когда я запускаю код ниже, я получаю NullPointerExceptions, я думаю, значение Buttons не распознается при попытке использовать findViewById. Кто-нибудь знает, что не так со следующим кодом и как я могу это исправить?

Button[] bttn = new Button[50]; 

String ids[] = new String[50]; 
for(int i=0; i<50; i++) 
{ 
    ids[i] = "button" + Integer.toString(i); 
} 

for(int i=0; i<50; i++) 
{ 
    int resID = getResources().getIdentifier(ids[i], "id", "your.package.name"); 
    bttn[i] = (Button) findViewById(resID); 
} 


for(int i=0; i<50; i++) 
{ 
    button_list.set(i, bttn[i]); 
} 
+3

Вы заменили '' your.package.name'' фактическое имя пакета, которое используете, как указано в манифесте? (Еще лучше, замените его 'getPackageName()' [или 'getContext(). GetPackageName()', если этот код не находится в 'Деятельности'.) –

+0

Можете ли вы дополнительно объяснить, чего вы хотите достичь? Я не могу думать о ситуации, где мне понадобится 50 независимых кнопок в списке. Спасибо. – JacksOnF1re

ответ

0

Вы можете сделать это в одном цикле

Button[] buttons = new Button[50]; 
for(int i = 0; i < buttons.length; i++){ 
    button[i] = (Button) findViewById(getResources().getIdentifier("button" + i, "id", getPackageName()); 
    buttonList.set(i, button[i]); // if your list is already built 
    //buttonList.add(button[1]); // if you are building your list 
} 

Я использую getPackageName(), как я предполагаю, что вы находитесь в деятельности, если это не так, вам нужно получить ссылку на контекст и используйте context.getPackageName(); Это будет одинаково для вызова getResources(), так как ему также нужна ссылка на ваш контекст.

+0

Я получаю сообщение об ошибке: Метод getIdentifier (String, String, String) не определен для типа Game (мой класс) – user2456977

+1

@ user2456977 Посмотрите мое обновление, возможно, вам нужно добавить 'getResources()' или 'getActivity(). GetResources() '(как-то ссылаться на ваш контекст и получать ресурсы). Не понимал, что вы не занимаетесь. – zgc7009

+0

Я работаю, но работает только при добавлении getResources. hm – user2456977

 Смежные вопросы

  • Нет связанных вопросов^_^