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