循环遍历众多Button变量

时间:2014-11-10 17:17:40

标签: android button findviewbyid

我有50 Buttons这样编码:

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

1 个答案:

答案 0 :(得分: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()因为我假设你在一个Activity中,如果不是这种情况你需要获得对上下文的引用并使用context.getPackageName();这对{{1}来说是一样的因为它还需要对你的上下文的引用。