例如,如果我有30个按钮,并且我想为每个按钮添加OnClickListener
,我是否必须为每个按钮手动执行button.setOnClickListener(this);
?这看起来非常混乱。
是否可以使用循环或什么?
答案 0 :(得分:8)
看一下这段代码:
Button[] b = new Button[30];
for(int i=0; i < b.length; i++)
{
b[i].setOnClickListener(this);
}
编辑:在此之前,您需要使用以下循环识别每个按钮
for(int i=0; i< b.length; i++){
b[i] = (Button) findViewById(R.id.button+i);
}
答案 1 :(得分:1)
如果你有不同的动作,需要在每个不同的按钮上设置, 你可以使用onClickListener的数组,然后在循环中运行它们中的每一个。以下示例假定按钮的数量等于侦听器的数量。
Button[] b = new Button[30];
onClickListener[] myListeners = new onClickListener[30];
{
//Initialize and add some code to each one of Listeners in the onClick method
}
for(onClickListener a: myListiners)
{
b[a.indexof].setOnClickListener(a);
}
答案 2 :(得分:0)
您可以在活动中实施onClickListener
界面,然后根据ID收听点击次数。
public class MyClickClass implements OnClickListener {
@Override
public void onClick(View v) {
switch(v){
case R.id.button1:
//some code
break;
case R.id.button2:
//some code
break;
}
}
}
答案 3 :(得分:0)
此处,layout
是对包含按钮的父视图组的引用。我还假设您的Activity扩展onClickListener(.setOnClickListener(this)
)。如果没有,那么只需传递对onclick()方法的引用。
for (int i = 0; i < layout.getChildCount(); i++) {
View v = layout.getChildAt(i);
Class c = v.getClass();
if (c == Button.class) {
((Button)v).setOnClickListener(this);
}
}
如果所有按钮在同一视图组中不存在,只需稍加努力就可以使其递归。然后,您可以从根视图组中向下递归。