0

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

是否可以使用循环或其他东西?

4

4 回答 4

7

看看这段代码:

        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);
       } 
于 2013-10-20T10:04:23.207 回答
1

如果您有不同的操作需要为每个不同的按钮设置顶部,您可以使用 onClickListener(s) 的数组,然后在循环中的每个按钮上运行。以下示例假定按钮的数量等于侦听器的数量。

 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);

}
于 2013-10-20T10:41:40.713 回答
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);
    }
}

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

于 2013-10-20T10:14:05.420 回答
0

您可以onClickListener在 Activity 中实现该接口,然后根据 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;
          }
       }
    }
于 2013-10-20T10:10:26.027 回答