无需创建无限量的onClickListeners

时间:2013-12-11 12:03:42

标签: android button onclicklistener

所以我正在开发一款带有数字键盘的应用程序。当然按下按钮时会发生一些事情,所以我必须为每个按钮设置一个onClickListener吗?问题是我在横向模式下有40个按钮,因此我必须创建40个不同的onClickListeners。我认为必须有更好的方法来做到这一点。你们有什么建议吗?

6 个答案:

答案 0 :(得分:3)

你可以通过双向实现这个目标,

<强>我

声明并定义按钮;

Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);

调用按钮 -

button1.setOnClickListener(menuButtonListener);
button2.setOnClickListener(menuButtonListener);
button3.setOnClickListener(menuButtonListener);

实现按钮监听器,为开关盒内的不同按钮定义作业

private OnClickListener myButtonListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
      switch(v.getId()){
        case R.id.button1 : // do your job
        case R.id.button2 : // do your job
        case R.id.button3 : // do your job
   .....
       }
     }
}

<强> II。

使用android:onclick属性 -

设置布局xml
android:onClick="onClick"

然后在您的活动类中添加onClick方法。

public void onClick(View v) {
  switch(v.getId()){
    case R.id.button1 : // do your job
    case R.id.button2 : // do your job
    case R.id.button3 : // do your job
...
 }
}

答案 1 :(得分:1)

是的,肯定有更好的方法..您只需创建一个onClickListener并将其全部设置为它们。您可以通过调用view.setTag(Object)将任何信息作为视图的标记。 在onClickListener中,您可以view.getTag()返回相同的对象。 希望它有所帮助。 :)

答案 2 :(得分:1)

在您的活动中实施onClickListener。然后在你的按钮中这样做: -

Button b1=(Button)findViewById(R.id.button1);
b1.setOnClickListener(this);

然后

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId()){
    case R.id.bttn1:
        //do something
        break;
    case R.id.bttn2:
        //do something
        break;
    case R.id.bttn3:
        //do something
        break;
            .
            .
            .
    }
}

答案 3 :(得分:1)

只创建一个onClickListener并为所有按钮设置相同。只要单击按钮,就会调用onClickListener的onclick方法并将视图作为参数。从视图使用getId方法来识别单击哪个按钮并相应地执行操作。有点像这样:

private OnClickListener onButtonlickListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.id_1:
            // TODO: Your Code for id_1
                break;
            case R.id.id_2:
            // TODO: Your Code for id_2
                break;
            case R.id.id_3:
            // TODO: Your Code for id_3
                break;
            default:
                break;
            }

        }
    };

我希望这会有所帮助。

答案 4 :(得分:1)

您可以为它们提供所有相同的onClickListener实例,然后根据启动回调的View ID执行不同的操作。所以,在伪代码中 -

 public void onClick(View v) {
     if(v.getId() == <someid>) {
       .. perform action
     else if (v.getId() == <someotherid>) {
       ..perform another action
      }
}

或者您可以使用switch语句而不是if。

答案 5 :(得分:1)

让你的类实现onClickListener并覆盖onClick方法。

bClearSearchAllSA.setOnClickListener(this);

public void onClick(View v) 
{
    switch(v.getId())
    {
        case R.id.clearSearchAllSA: 

        case R.id.followingSA:

        case R.id.followersSA:
    }
}