我有一个活动,在这里我有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 }
.... 但是
任何想法? 也许有办法从活动中取消所有按钮?
答案 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);
现在你有了上一个按下按钮,所以按下它或其他任何按钮。