如何使用循环结构来迭代某些视图ID?

时间:2018-02-23 19:25:27

标签: java android

而不是执行以下操作,

ButtonHandler bh = new ButtonHandler();
findViewById(R.id.button1).setOnClickListener(bh);
findViewById(R.id.button2).setOnClickListener(bh);
findViewById(R.id.button3).setOnClickListener(bh);

这看起来过于冗长,我试图按照以下方式重写它们但却失败了。

ButtonHandler bh = new ButtonHandler();
for (int id : int[]{R.id.button1, R.id.button2, R.id.button3}) {
    findViewById(id).setOnClickListener(bh);
}

问题

如何使用循环结构迭代一些视图id如上所述?

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以直接访问ID

import java.lang.reflect.Field;

for (int i = 1; i < 4; i++) {
    int id = R.id.class.getField("button" + i).getInt(0);
    tv[i] = (TextView)findViewById(id);
    tv[i].setOnClickListener(bh);
}

这里的诀窍是R.class文件并不复杂。致电R.id.something即可访问something班级内的R.id字段。

答案 1 :(得分:1)

ButtonHandler bh = new ButtonHandler();
int[] arr = {R.id.button1, R.id.button2, R.id.button3};
for (int id : arr) {
    findViewById(id).setOnClickListener(bh);
}

只是声明外面的数组解决了我的问题。