簡體   English   中英

如何取消選中 radiogroup 中的單選按鈕並收聽動作

[英]How to uncheck a radio button in radiogroup and listen to the action

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

}

單選按鈕似乎不起作用,所以我用復選框替換了它們並手動處理它們。 它奏效了。!

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

試試這個代碼,希望它會幫助你..

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

}

你應該有一個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();
                    }

        }
    });

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM