【问题标题】:How to uncheck a radio button in radiogroup and listen to the action如何取消选中 radiogroup 中的单选按钮并收听操作
【发布时间】:2018-08-11 11:02:16
【问题描述】:

我有 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;
        }
      }
    });

}

【问题讨论】:

    标签: java android checkbox radio-button radio-group


    【解决方案1】:

    试试这个代码,希望对你有帮助..

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

    【讨论】:

    • 没用..!每次我单击取消选中按钮时,它都会显示并快速移动,然后我再次单击并保持检查状态,无论我单击多少次。
    【解决方案2】:

    似乎单选按钮不起作用,所以我将它们全部替换为复选框并手动处理它们。并且成功了!

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

    【讨论】:

      【解决方案3】:

      你应该有一个 hideRedCards()hideBlueCard() ,hideGreenCards() 方法来隐藏你的卡片,当radioButton未选中时,调用这个方法

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-06
        • 2013-11-22
        • 2011-01-08
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多