100个按钮,只有1个活动

时间:2014-03-29 13:40:43

标签: android button onclick

我有一个活动,在这里我有100个按钮,我希望当我按下按钮1然后按另一个按钮时按钮1应该没有按下。

我知道我可以用

来做到这一点
  if(Button1.isPressed()) {
        Button2.setPressed(false);
        Button3.setPressed(false);
        Button4.setPressed(false);
        Button5.setPressed(false);
        Button6.setPressed(false);
        Button7.setPressed(false);
        Button8.setPressed(false);
        ......................... }
  else { do nothing }

.... 但是

  1. 代码太多了
  2. 编码员会杀了我,或只是会笑我。
  3. 任何想法? 也许有办法从活动中取消所有按钮?

3 个答案:

答案 0 :(得分:1)

不是最漂亮的解决方案,但你可以这样做OnClickListener

View.OnClickListener listener = new View.OnClickListener() {
    public void onClick(View v) {
        ViewGroup parent = (ViewGroup) v.getParent();
        for (int i = 0; i < parent.getChildCount(); i++) {
            View current = parent.getChildAt(i);
            if (current != v && current instanceof Button) {
                ((Button) current).setPressed(false);
            }
        }
        ((Button) v).setPressed(true);
    }
}

并将其附加到所有按钮上。

然后,只要单击一个按钮,它就会迭代与所单击按钮位于同一布局(或实际上是视图组)的所有视图,并且对于除按下单击按钮之外的任何按钮视图,它会拨打setPressed(false)

请注意,如果所有按钮位于相同的布局中,则此功能仅可用于开箱即用。如果它们采用嵌套布局,则必须稍微调整一下。

关闭主题:您需要100个按钮?那是很多按钮。您可能需要重新设计用户界面

答案 1 :(得分:1)

好的,当按下一个按钮时,不是一遍又一遍地遍历所有按钮,而是可以存储一个变量,该变量存储上次按下的按钮的按钮编号。现在,当按下第二个按钮时,禁用之前按下的按钮,从保存的变量中获取其索引,启用按下的按钮并将其索引存储在变量中。

下面是一个示例伪代码,为您提供想法:

int buttonLastPressed = 0;
void onButtonClick(Button buttonPressed){
     if(buttonLastPressed != 0){
        disableButton(buttonLastPressed);
        enableButton(buttonPressed);
        buttonLastPressed = buttonPressed.getIndex()
     }
}

使您免于循环遍历每个按钮以禁用它。

答案 2 :(得分:0)

将按钮1的ID定义为100

按下按钮时,将其保存在某个成员变量中,如previous_pressed

在更新previous_pressed值之前,找到并按下之前按下的按钮

按钮previous_pressed_button =(按钮)findViewById(previous_pressed);

现在你有了上一个按下按钮,所以按下它或其他任何按钮。