Android отключение переключателей - PullRequest
2 голосов
/ 27 июля 2011

У меня есть 3 кнопки радио, давайте предположим, что радио1, радио2, радио3.Что я сделал, если я проверил radio1 и radio2, radio3 будет невозможно проверить и так далее.Таким образом, я могу проверять только 2 кнопки одновременно.

Затем я сделал эту кнопку, чтобы, если я нажал на нее, она отключила все отмеченные переключатели.Теперь моя проблема в том, что я пытаюсь проверить radio1 и radio2 и очистить его.Радио3 по-прежнему не будет активным, даже если радио1 и 2 больше не проверяются.

RadioButton radio1;
RadioButton radio2;
RadioButton radio3;
Button clear;
TextView tv;

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.secondxml);
radio1 = (RadioButton) findViewById(R.id.rd1);
radio2 = (RadioButton) findViewById(R.id.rd2);
radio3 = (RadioButton) findViewById(R.id.rd3);
radio1.setOnCheckedChangeListener(this);
radio2.setOnCheckedChangeListener(this);
radio3.setOnCheckedChangeListener(this);
tv = (TextView) findViewById(R.id.tv);
clear = (Button) findViewById(R.id.clear);
clear.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
    radio1.setChecked(false);
    radio2.setChecked(false);
    radio3.setChecked(false);
    tv.setText("");
    }
});
}

@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
    // TODO Auto-generated method stub
    if(radio1.isChecked() && radio2.isChecked()){
        tv.setText("Radio1 and 2 is checked ");
        radio3.setClickable(false);
    }
    if(radio1.isChecked() && radio3.isChecked()){
            radio2.setClickable(false);
        tv.setText("radio 1 and 3 is checked");

    }
    if(radio2.isChecked() && radio3.isChecked()){
        radio1.setClickable(false);
        tv.setText("radio2 and 3 is checked");

    }
}

}

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Поэтому вы установили radio3, чтобы он не активировался нажатием на radio3.setClickable(false);, когда вы выбрали radio1 и radio2. Ваша кнопка очистки не меняет этого.

Я предлагаю в вашем onClick(...) методе для вашего чистого OnClickListener звонка

radio1.setClickable(true);
radio2.setClickable(true);
radio3.setClickable(true);

это остановит их отключение при снятии выделения и вернет их в состояние по умолчанию.

1 голос
/ 22 января 2014

На самом деле, когда используется отдельная радиокнопка, а не радиогруппа, клавиша использует radio.isSelected () для определения текущего состояния кнопки.

Этот код моего прослушивателя на ощупь исправил похожую проблему, с которой я столкнулся:

     OnClickListener radio_button_click = (new OnClickListener() {  

 public void onClick(View v) {  
                  RadioButton rb = (RadioButton) v;   

                  if( rb.isSelected()==true) {
                      rb.setSelected(false);
                      rb.setChecked(false);
                      rb.setClickable(true);

                  }
                  else{
                      rb.setSelected(true);
                  rb.setClickable(true);

                  }
}

}                     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...