1

我在一项活动中有 5 个按钮。我的代码应该如下工作: 1(正确)按钮按下它应该做一些事情。按下其他 4 个,应该做其他事情...我不想使用 5 个 onclicklistener

if(Button1 press) {
    do something
}

else if (button2 or button3 or button4 or button5 press)
{
    something else to do
}
4

3 回答 3

7

你为什么不这样做:

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

OnClickListener listener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v.equals(button1)) {
            // do something
        } else {
            // do something else
        }
    }
};

button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
button3.setOnClickListener(listener);
button4.setOnClickListener(listener);
button5.setOnClickListener(listener);
于 2013-05-09T19:19:12.380 回答
4

有几种方法可以做到这一点,但如果buttons总是做同样的事情,那么你可以onClick(在你的 xml 中设置 )。

首先,为每个定义相同的函数Button

<Button
     android:id="@+id/button1"
       ....
     android:onClick="functionName"/>
<Button
     android:id="@+id/button2"
       ....
     android:onClick="functionName"/>

然后在你的代码中

public void functionName(View v)
{
    switch (v.getId())   // v is the button that was clicked
    {
       case (R.id.button1):  // this is the oddball 
       ...do stuff
       break;
    default:   // this will run the same code for any button clicked that doesn't have id of button1 defined in xml
        ...do other stuff
    break;
    }
}

现在你的ButtonsoronClickListeners不必在你的代码中定义,除非你需要用Button

编辑

@prosperK 指出,随着较新的 ​​ADT 传递intswitch原因错误,因此if/else如果是这种情况,您可能需要一个。链接到关于此的 SO 帖子

于 2013-05-09T19:17:16.507 回答
1

您可以定义两个不同的点击侦听器。按钮 1 获得第一个听众,其他人获得第二个听众。希望这可以帮助。

于 2013-05-09T19:15:59.630 回答