如何只允许三个安卓切换按钮中的一个处于开启状态?

9

我正在使用3个切换按钮。在我的Android应用程序中,我希望只能选择其中一个切换按钮。如何实现这一点?


2
你可以使用RadioGroup(http://developer.android.com/reference/android/widget/RadioGroup.html)。请参考此线程。https://dev59.com/u3E95IYBdhLWcg3wSb3P - Turnsole
5个回答

14

使用简单的 onChangeListener 即可:

public class TestProjectActivity extends Activity {

ToggleButton one; 
ToggleButton two;
ToggleButton three;
ToggleButton four;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    one = (ToggleButton) findViewById(R.id.toggleButton1);
    two = (ToggleButton) findViewById(R.id.toggleButton2);
    three = (ToggleButton) findViewById(R.id.toggleButton3);
    four = (ToggleButton) findViewById(R.id.toggleButton4);

    one.setOnCheckedChangeListener(changeChecker);
    two.setOnCheckedChangeListener(changeChecker);
    three.setOnCheckedChangeListener(changeChecker);
    four.setOnCheckedChangeListener(changeChecker);
}

OnCheckedChangeListener changeChecker = new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked){
            if (buttonView == one) {
                two.setChecked(false);
                three.setChecked(false);
                four.setChecked(false);
            }
            if (buttonView == two) {
                one.setChecked(false);
                three.setChecked(false);
                four.setChecked(false);
            }
            if (buttonView == three) {
                two.setChecked(false);
                one.setChecked(false);
                four.setChecked(false);
            }
            if (buttonView == four) {
                two.setChecked(false);
                three.setChecked(false);
                one.setChecked(false);
            }
        }
    }
};

为什么要使用CompoundButton而不是RadioGroup? - Kala J

9

ThePikeman的解决方案还可以,但根据您有多少按钮,您可能需要考虑一个可以迭代的数组。

对于少量的按钮,Pikeman的代码可以简化以节省打字...

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked){
      if (buttonView != one) {
        one.setChecked(false);
      }
      if (buttonView != two) {
        two.setChecked(false);
      }
      if (buttonView != three) {
        three.setChecked(false);
      }
      if (buttonView != four) {
        four.setChecked(false);
      }
    }
  }

3

您可以使用单选按钮。如果您不想使用单选按钮,请查看此链接 - 它会向您展示如何监听按钮状态的更改。如果您发现其中一个按钮已更改,请将其他两个按钮设置为关闭状态。


0
我使用以下函数;
private void setIsChecked(CheckBox checkBox){
      buttonOne.setChecked(false);
      buttonTwo.setChecked(false);
      buttonThree.setChecked(false);
      checkBox.setChecked(true)
}

现在除了你选择的那个之外,所有的都被视为有效。

例如

setIsChecked(buttonOne);

现在只有按钮一被选中等等..


0
如果您正在使用MaterialButtonToggleGroup,您只需要在xml中使用此属性:
<com.google.android.material.button.MaterialButtonToggleGroup
   ...
   app:singleSelection="true"
   ...>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接