如何取消选中radiogroup中的单选按钮并听取操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何取消选中radiogroup中的单选按钮并听取操作相关的知识,希望对你有一定的参考价值。

我有3个自定义单选按钮,默认情况下不会选中它们。它们就像一个过滤器。我想知道是否有办法取消选中已选中的按钮并听取该操作。所以基本上我可以取消过滤器。

我知道在这种情况下我应该使用checkbox,但我不希望检查多于一个!

 RadioGroup radioGroup;
 RadioButton radioYellow;
 RadioButton radioGreen;
 RadioButton radioRed;
 boolean isChecked;

void handleRadioButtons(){

    radioRed.setChecked(false);
    radioGreen.setChecked(false);
    radioYellow.setChecked(false);
    showAllCards();

    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(RadioGroup group, int checkedId) {
       // RadioButton rad = group.findViewById(checkedId);
        Log.i("isChecked: ", isChecked + "");

       //I want to call showAllCards() when no button is checked

        switch (checkedId) {
          case R.id.radioRed:
            showRedCards();
            break;

          case R.id.radioGreen:
            showGreenCards();
            break;

          case R.id.radioYellow:
            showYellowCards();
            break;
        }
      }
    });

}
答案

试试这段代码,希望它能帮到你..

 RadioGroup radioGroup;
 RadioButton radioYellow;
 RadioButton radioGreen;
 RadioButton radioRed;
 boolean isChecked;

void handleRadioButtons(){

    radioRed.setChecked(false);
    radioGreen.setChecked(false);
    radioYellow.setChecked(false);
    showAllCards();

    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(RadioGroup group, int checkedId) {
       // RadioButton rad = group.findViewById(checkedId);
        Log.i("isChecked: ", isChecked + "");

       //I want to call showAllCards() when no button is checked

        switch (checkedId) {
          case R.id.radioRed:
            // check if it is checked or not...

            if(radioRed.isChecked())
                radioRed.setChecked(false);
            else
                radioRed.setChecked(true);

            // showRedCards();
            break;

          case R.id.radioGreen:

            if(radioGreen.isChecked())
                radioGreen.setChecked(false);
            else
                radioGreen.setChecked(true);

            //showGreenCards();
            break;

          case R.id.radioYellow:

            if(radioYellow.isChecked())
                radioYellow.setChecked(false);
            else
                radioYellow.setChecked(true);

            //showYellowCards();
            break;
        }
      }
    });

}
另一答案

似乎单选按钮不起作用,所以我用复选框替换它们并手动处理它们。它工作。

greenCheckBox.setChecked(false);
yellowCheckBox.setChecked(false);
redCheckBox.setChecked(false);
showAllCards();


greenCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
  @Override
  public void onCheckedChanged(CompoundButton button, boolean isChecked) {
    if (isChecked){
      yellowCheckBox.setChecked(false);
      redCheckBox.setChecked(false);
      showGreenCards();
    }else {
      showAllCards();
    }
  }
});


yellowCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
  @Override
  public void onCheckedChanged(CompoundButton button, boolean isChecked) {
    if (isChecked){
      greenCheckBox.setChecked(false);
      redCheckBox.setChecked(false);
      showYellowCards();
    }else {
      showAllCards();
    }
  }
});

redCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
  @Override
  public void onCheckedChanged(CompoundButton button, boolean isChecked) {
    if (isChecked){
      yellowCheckBox.setChecked(false);
      greenCheckBox.setChecked(false);
      showRedCards();
    }else {
      showAllCards();
    }
  }
});
另一答案

你应该有一个hideRedCards()hideBlueCard()hideGreenCards()方法隐藏你的卡,当radioButton是unChecked时,调用这个方法

    void handleRadioButtons() {

    radioRed.setChecked(false);
    radioGreen.setChecked(false);
    radioYellow.setChecked(false);
    // showAllCards();

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // RadioButton rad = group.findViewById(checkedId);
            Log.i("isChecked: ", isChecked + "");


                    if (radioRed.isChecked()) {
                        radioRed.setChecked(true);
                        showRedCards();

                    } else{
                        radioRed.setChecked(false);
                        HideRedCards();
                    }


                    if (radioGreen.isChecked()) {
                        radioGreen.setChecked(true);
                        showGreenCards();

                    } else{
                        radioGreen.setChecked(false);
                        HideGreenCards();
                    }


                    if (radioYellow.isChecked()) {
                        radioYellow.setChecked(true);
                        showYellowCards();

                    } else{
                        radioYellow.setChecked(false);
                        HideYellowCards();
                    }

        }
    });

}

以上是关于如何取消选中radiogroup中的单选按钮并听取操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在radiogroup中将选中的单选按钮设置为默认值?

如何以编程方式重置或取消选中 Angular 中的单选按钮?

如何取消选中或清除单选按钮组?

取消选中反应中的单选按钮

取消选中带有 Material UI 的单选按钮

如何更改我的代码以取消选中从 javascript 到 jQuery 的单选按钮? [复制]