基于findViewById中的名称的动态访问

时间:2013-05-25 14:38:11

标签: java android loops

很抱歉标题含糊不清,

以下是麻烦。我想使用x变量迭代这个名称中使用1 -9值的对象,(R.id.imageButtonx

for (int x = 1; x <10; x++)
    mm.add((Button) findViewById(R.id.imageButtonx));

//只是为了更深入一点。这适用于Android。

我从一个Button数组开始然后我这样做了:

 main_Menu = new Button[] {
            (Button) findViewById(R.id.imageButton1),
            (Button) findViewById(R.id.imageButton2),
            (Button) findViewById(R.id.imageButton3),
            (Button) findViewById(R.id.imageButton4),
            (Button) findViewById(R.id.imageButton5),
            (Button) findViewById(R.id.imageButton6),
            (Button) findViewById(R.id.imageButton7),
            (Button) findViewById(R.id.imageButton8),
            (Button) findViewById(R.id.imageButton9)
        };

所以我可以做一个两行的foreach循环来附加onbuttonclicklistener。

所以我想知道我是否可以将十行减少为两行。我搬到了一个ArrayList。我原本希望它是方括号,括号,或单引号,或双引号来绕过x变量,但从其中一个答案,似乎不可能。

5 个答案:

答案 0 :(得分:4)

Java不会对&#34; x&#34;进行文本替换。在带有循环变量的imageButtonx中。

但是,您可以创建一个imageButton ID数组,并按索引引用每个ID。

答案 1 :(得分:0)

我认为你不能将变量用作你想要添加的对象名称(实际上是任何对象名称)的一部分。

答案 2 :(得分:0)

如果你的意思是android

像这样使用Resources.getIdentifier()

int id = getResources().getIdentifier("imageButton" + x, "id", null);

String s = getString(id);

答案 3 :(得分:0)

根据您的具体需求,您可以使用单独的函数执行类似操作,该函数根据参数返回其中一个变量。有点像:

public Button getButton(int index) {
    switch (index) {
        case 0: return button0;
        case 1: return button1;
        ...
        default: throw new ArgumentOutOfRangeException("index");
    }
}

然后你可以用以下内容替换你的循环:

for (int x = 1; x < 10; x++)
    mm.add((Button) findViewById(R.id.getButton(x)));

答案 4 :(得分:0)

怎么样

int[] imageButtons = { R.id.imageButton0, R.id.imageButton1, R.id.imageButton2, R.id.imageButton3, ...};
for (int x = 0; x <9; x++)
mm.add((Button) findViewById(imageButtons[i]));

这应该适合您。 :)