Изменить выбор группы радиостанций при каждом нажатии радиокнопки - PullRequest
0 голосов
/ 27 октября 2018

У меня есть пользовательская группа радиосвязи с двумя радиокнопками внутри, и я хочу изменить ее выбор, даже если пользователь нажимает на отмеченную радиокнопку.

пока вот как это работает:

enter image description here

как вы видите, если (выкл) отмечен, и я нажимаю на него, ничего не происходит .. Я хочу, чтобы он изменил выделение на (вкл.).

Я пытался использовать OnClickListener следующим образом:

final RadioButton btn_on = view.findViewById(R.id.on);
    final RadioButton btn_off = view.findViewById(R.id.off);

    final View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                if(radio_group.getCheckedRadioButtonId()==R.id.on)
                {
                    radio_group.check(R.id.off);
                }

                if(radio_group.getCheckedRadioButtonId()==R.id.off)
                {
                    radio_group.check(R.id.on);
                }

        }
    };

    btn_on.setOnClickListener(listener);
    btn_off.setOnClickListener(listener);

но это не сработает .. есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 27 октября 2018

Я считаю, что это должно работать:

boolean fromClickListener = false;
boolean fromCheckedChange = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final RadioGroup radio_group = findViewById(R.id.radio_group);
    final RadioButton btn_on = findViewById(R.id.on);
    final RadioButton btn_off = findViewById(R.id.off);

    radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if (fromClickListener)
                return;

            fromCheckedChange = true;
        }
    });


    final View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (fromCheckedChange) {
                fromCheckedChange = false;
                return;
            }

            boolean clickedOn = (((RadioButton) v) == btn_on);

            fromClickListener = true;
            btn_on.setChecked(!clickedOn);
            btn_off.setChecked(clickedOn);
            fromClickListener = false;
        }
    };

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