所以我在每个行(列)中都有一个包含 n 行和 m 项目的表格布局。每个都是一个ImageButton,我想为它们中的每一个添加一个onClick(View v)方法。无论如何要在表格中循环并执行此操作,还是必须对其进行硬编码 n * m 次?
答案 0 :(得分:3)
是的,你必须循环遍历数组。您需要实例化按钮并设置监听器。您必须为每个按钮分配一个监听器,但是您可以通过单个方法响应onClick()
,而不是为每个按钮制作内联方法,这会很快变得混乱。
public class ButtonExampleActivity implements View.OnClickListener {
private int[][] buttonViewIds = new int[][] {
{ R.id.button00, R.id.button01, R.id.button02 },
{ R.id.button10, R.id.button11, R.id.button12 },
{ R.id.button20...
};
// assuming each row is the same length you can do this
private Button[][] buttonArray = new Button[buttonViewIds.length][buttonViewIds[0].length];
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.layout);
for (int i=0; i<buttonViewIds.length; i++) {
for (int j=0; j<buttonViewIds[0].length; j++) {
buttonArray[i][j] = (Button) findViewById(buttonViewIds[i][j]);
buttonArray[i][j].setOnClickListener(this);
}
}
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button01:
case R.id.button02:
case R.id.button03:
// do something
break;
case R.id.button10:
// do something else
break;
...
default:
Log.e("Not a handled Button: "
+ getResources().getResourceName(v.getId());
}
}
}