有没有一种方法可以一次为多个对象设置方法?

时间:2013-10-20 09:57:55

标签: android

例如,如果我有30个按钮,并且我想为每个按钮添加OnClickListener,我是否必须为每个按钮手动执行button.setOnClickListener(this);?这看起来非常混乱。

是否可以使用循环或什么?

4 个答案:

答案 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);
    }
}

如果所有按钮在同一视图组中不存在,只需稍加努力就可以使其递归。然后,您可以从根视图组中向下递归。