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

Java 如何使用循环构造来迭代某些视图ID?,java,android,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 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


您可以直接访问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);
}
import java.lang.reflect.Field;
对于(int i=1;i<4;i++){
intid=R.id.class.getField(“按钮”+i).getInt(0);
tv[i]=(TextView)findViewById(id);
tv[i].setOnClickListener(bh);
}

这里的技巧是R.class文件并不复杂。通过调用
R.id.something
您正在访问
R.id
类中的
something
字段。

您可以直接访问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);
}
ButtonHandler bh = new ButtonHandler();
int[] arr = {R.id.button1, R.id.button2, R.id.button3};
for (int id : arr) {
    findViewById(id).setOnClickListener(bh);
}
import java.lang.reflect.Field;
对于(int i=1;i<4;i++){
intid=R.id.class.getField(“按钮”+i).getInt(0);
tv[i]=(TextView)findViewById(id);
tv[i].setOnClickListener(bh);
}
这里的技巧是R.class文件并不复杂。通过调用
R.id.something
可以访问
R.id
类中的
something
字段

ButtonHandler bh = new ButtonHandler();
int[] arr = {R.id.button1, R.id.button2, R.id.button3};
for (int id : arr) {
    findViewById(id).setOnClickListener(bh);
}
仅在外部声明数组就解决了我的问题



仅在外部声明数组就解决了我的问题

它不应该失败。您收到的错误消息是什么?应该是int id,而不是int[]我认为这是键入错误。声明数组时需要新的int[],因为您正在分配它。@Gabeschen:谢谢!!!它不应该失败。您收到的错误消息是什么?应该是int id,而不是int[]我认为这是键入错误。声明数组时需要新的int[],因为您正在分配它。@Gabeschen:谢谢!!!如果你已经知道它们有多少个以及它们的名称格式,那么只制作一个数组就不那么脆弱,也更容易维护。@Gabetechan这是一个取决于项目和个人品味的偏好问题。我同意你的方法会起作用,但在代码审查中,它会被100%拒绝。它更难理解,更慢,更容易破裂。显然更糟。使用硬编码字符串文字浪费了编译类型检查的好处。如果您已经知道其中有多少及其名称格式,只制作一个数组就不那么脆弱,也更容易维护。@Gabetechan这是一个取决于项目和个人品味的偏好问题。我同意你的方法会起作用,但在代码审查中100%都会被拒绝。它更难理解,更慢,更容易破裂。使用硬编码字符串文字浪费了编译类型检查的好处。