Переключатель Android нажмите уже отмеченную кнопку

#android

#Android

Вопрос:

У меня есть действие, которое позволяет пользователям выбирать «тип» объекта с помощью переключателей, но при изменении этого объекта я хочу предварительно проверить переключатель на предмет типа, который уже есть, и разрешить пользователю снова щелкнуть этот отмеченный переключатель, если они не хотят менять тип, прежде чем перейти к следующему действию. Я хочу предварительно проверить, потому что пользователи могут не помнить, какой тип был, когда они идут, чтобы изменить его.

Проблема в том, что прослушиватель запускается только при изменении параметра, а не когда пользователь нажимает на уже отмеченный параметр. Это имеет смысл, поскольку прослушиватель называется «OnCheckedChangeListener», но когда я пытаюсь добавить прослушиватель OnClick, чтобы перехватить нажатие отмеченной кнопки, ничего не происходит. Это просто не срабатывает, и я не вижу других слушателей в объекте RadioGroup, которые, похоже, будут делать то, что я хочу.

Вот проверенный прослушиватель изменений, который отлично работает:

 rgThingType.setOnCheckedChangeListener { radioGroup, i ->
    val checkedRadioButton = radioGroup?.findViewById(i) as? RadioButton
    when(checkedRadioButton?.id) {
        // ...
    }
    goToActivity()
}
  

И вот прослушиватель по щелчку, который никогда не срабатывает, несмотря ни на что:

 rgThingType.setOnClickListener {
    goToActivity()
}
  

Теперь я могу добавить OnClick к каждой переключающей кнопке для достижения этой цели, т. Е.:

 rbThingType1.setOnClickListener {
    thingType = 1
    if(/* extra logic to prevent double activity start */) {
        goToActivity()
    }
}
  

но это неудобно и кажется антишаблоном, учитывая, что у меня уже есть проверенный прослушиватель изменений, и на самом деле это все портит, поскольку вызывает повторное выполнение следующего действия дважды, поскольку вызываются оба слушателя, заставляя меня сохранять / проверять дополнительное состояние, чтобы избежать. Есть ли правильный способ сделать это?

Комментарии:

1. Я не понимаю, что вы имеете в виду под всей этой предварительной проверкой. Разве пользователь не знает, какой тип выбран, потому что он написан рядом с выбранной кнопкой RadioButton? Кроме того, я чувствую, что кнопка отправки была бы лучше, чем нажатие кнопки RadioButton для запуска другого действия.

2. Пользователь не узнает, если я не скажу им, либо предварительно установив флажок, либо поместив рядом с ним какой-либо другой визуальный индикатор. Из предыдущего действия они нажимают кнопку / действие «Изменить», которое приводит их к этому действию, и им может понадобиться напоминание о том, что это за тип. Я рассматривал возможность использования кнопки «отправить» вместо того, чтобы мгновенно переходить к следующему действию после выбора нового типа объекта, но это действительно ненужный дополнительный щелчок, которого я хочу избежать.

Ответ №1:

 RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);     
radioGroup.setOnClickListener(v -> {
                    // get selected radio button from radioGroup
                    int selectedId = radioGroup.getCheckedRadioButtonId();
                    // find the radiobutton by returned id
                    radioButton =  findViewById(selectedId);
                    String slectedValue=radioButton.getText()          
    });