2013-05-09 125 views
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 
} 
+1

除非按钮非常相似,我真的会建议使用上点击听众不同。当您在6个月内回到代码时,它使您的代码更易于阅读和理解。 – 2013-05-09 19:21:58

+0

@GabeSechan如果所有'Buttons'只有一个做同样的事情,那么使用一个监听器更容易阅读和理解,恕我直言。如果他们做了不同的事情,那么它会让人困惑,但在这里除了一个人做同样的事情 – codeMagic 2013-05-09 19:30:24

+0

就像我说的 - 除非他们非常相似。我只是厌倦了阅读看起来像Windows消息循环的厄运大开关语句。 – 2013-05-09 19:35:07

回答

1

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

3

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

首先,定义相同的功能为每个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; 
    } 
} 

现在您ButtonsonClickListeners没有在你的代码中定义,除非您需要用Button

编辑

@prosperK指出,随着较新的ADT通过intswitch会导致错误,因此如果情况如此,您可能需要if/elselink to SO post about this

+0

因此if-else更好,switch-case 。请参阅[切换大小写错误。在Mac上用于Android开发的Eclipse IDE:将工作区合规性更改为JRE 1.7](http://stackoverflow.com/questions/10041414/switch-case-error-eclipse-ide-for-and-android-development-on-mac-change-工作区) – 2013-05-09 19:21:36

+0

@ρяσѕρєяK我没有意识到这一点,谢谢。我将编辑。我只是想要求链接...再次感谢 – codeMagic 2013-05-09 19:25:16

+0

我编辑过,以防您的评论被删除 – codeMagic 2013-05-09 19:28:46

6

你为什么不去做这样:

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