Android RadioButton Подтвердить выбор

В моем приложении для Android требуется предоставить уведомление (предупреждение) перед тем, как пользователь изменит выбор группы радио.

В основном я пытаюсь дать диалоговое сообщение (с предупреждающим сообщением и кнопками ДА/НЕТ для подтверждения изменения), когда пользователь нажимает любую другую кнопку-переключатель в этой группе радио. Если пользователь нажимает YES, чтобы изменить выбор кнопки readio на то, что пользователь хотел изменить, в противном случае (если нажать NO) выбрать обратно с тем, что было выбрано ранее.

Я не вижу никаких вариантов в методе onCheckedChanged при прослушивании OnCheckedChangeListener. Что было бы лучшим способом сделать это. Спасибо

РЕДАКТИРОВАНИЕ

Я предоставляю предупреждающее сообщение из диалогового окна в методе onCheckedChanged с возможностью подтверждения изменения (с помощью кнопок ДА/НЕТ). Проблема в том, что когда пользователь не хочет новый выбор после просмотра предупреждения, мне нужен способ узнать ранее выбранную радиокнопку, чтобы отменить новый выбор пользователя.

public void onCheckedChanged(RadioGroup group, int checkedId) 

Вышеупомянутый метод предоставляет «checkedId», но как узнать, какая радиокнопка была выбрана ранее. Это необходимо, когда пользователь хочет отменить изменение.

Это можно сделать, отслеживая более ранний выбор, определяя переменную уровня класса для хранения старого идентификатора радиокнопки или какой-либо другой подобной логики. Но в группе «Радио» должен быть прямой способ отменить новый выбор (выбрав старый назад). Я искал прослушиватель типа beforeRadioCheckChange, но не смог найти


person JibW    schedule 15.08.2016    source источник
comment
Создайте и покажите диалог в onCheckedChange и в зависимости от того, что они нажмут, либо пропустите галочку, либо снимите ее. Это довольно неясно, на чем именно вы застряли.   -  person codeMagic    schedule 15.08.2016
comment
Да, кажется, очень легко сделать это cM;   -  person Eenvincible    schedule 15.08.2016
comment
Спасибо codeMagic и Eenvincible. Я пробовал то же самое в методе onCheckedChanged. То есть загрузка диалогового окна с предупреждающим сообщением с кнопками YES/NO для подтверждения или отмены изменения выбора переключателя. Но проблема в том, что когда пользователь нажимает NO, я просто хочу выбрать ранее выбранный переключатель. В основном ищем способ отменить новый выбор и выбрать ранее выбранный переключатель. Можно сделать это, определив переменную уровня класса для хранения старого выбора и подобную логику. Но интересно, есть ли прямой способ отменить новый выбор и выбрать старый обратно. Спасибо   -  person JibW    schedule 16.08.2016
comment
Решения, упомянутые ниже, вызывают повторное срабатывание onChange, поскольку они обнаруживаются как изменение. Нужен либо механизм автоматического возврата, либо подтверждение включенного изменения   -  person Rahul Kahale    schedule 12.09.2020


Ответы (2)


Вы можете сохранить выбранную кнопку раньше (когда вы на самом деле устанавливаете, какой из переключателей должен быть проверен изначально):

int selectedButton = mRadioGroup.getCheckedRadioButtonId();

И обновите его внутри обратного вызова onCheckedChanged:

selectedButton = group.getCheckedRadioButtonId();

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

person Anton Malyshev    schedule 16.08.2016

в RadioGroup нет метода, позволяющего отменить действие, однако вы можете легко добиться этого, удерживая идентификатор выбранного RadioButton во внешней переменной и используя его для отмены ваших изменений:

RadioGroup radio;
static int buttonChecked;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    radio = (RadioGroup) findViewById(R.id.radioGroup);
    buttonChecked = radio.getCheckedRadioButtonId(); // be sure to get the checked button id first time before assigning the onCheckedChange
    radio.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // Raise Dialog
            if(yes){ // User confirmeed
                buttonChecked = checkedId;
            }else{ // User refused
                if(buttonChecked != -1) // to prevent app from crashing if nothing is already selected
                    radio.check(buttonChecked);
                else
                    radio.clearCheck();
            }
        }
    });
}
person Muhammed Refaat    schedule 16.08.2016
comment
В тот момент, когда старый переключатель устанавливается программно, снова запускается onChange, и пользователь застревает в цикле, пока не нажмет положительную кнопку. Требуется подтверждение, созданное вместе с изменением радио, работающим на утверждении, иначе произойдет автоматический возврат. - person Rahul Kahale; 12.09.2020