#android #android-recyclerview #android-radiobutton
#Android #android-recyclerview #android-radiobutton
Вопрос:
У меня есть RecyclerView с каждым элементом, состоящим из текста и фиолетового переключателя. Переключатель по умолчанию не выбран. Если пользователь пытается перейти к следующему экрану, не выбирая ни одного переключателя, я хочу, чтобы отображаемый для всех переключателей цвет изменился с фиолетового на красный, предлагая пользователю выбрать один из них. Затем, если пользователь выберет одну из переключателей, состояние всех кнопок должно вернуться к фиолетовому, а выбранная кнопка — к темно-фиолетовому.
В обычном представлении списка я мог бы вызывать каждую кнопку по отдельности. Как я должен изменить отображаемый для всех кнопок в представлении recycler в состоянии ошибки?
Комментарии:
1. почему recyclerview
Ответ №1:
Вы можете получить представление для каждого дочернего элемента в представлении Recycler, и из этого представления вы можете ссылаться на переключатель и изменять его отображение. Пример ниже:
RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position);
RadioButton button = holder.itemView.findViewById(R.id.radio_button);
button.setBackgroundResource(R.drawable.purple_background);
Теперь это просто вопрос перебора всех RecyclerView
дочерних элементов и изменения фонового ресурса для s. RadioButton
Вы можете выполнить итерацию, используя этот код:
for (int i = 0; i < recyclerView.getChildCount(); i ) {
//do something here
}
Теперь вы можете изменить фон всех RecyclerView
дочерних переключателей следующим образом:
for (int i = 0; i < recyclerView.getChildCount(); i ) {
//change the background to purple
RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position);
RadioButton button = holder.itemView.findViewById(R.id.radio_button);
button.setBackgroundResource(R.drawable.purple_background);
}
Ответ №2:
Я нашел решение для этого.
Во-первых, я добавил if
проверку внутри bind
ViewHolder
класса следующим образом:
fun bind(slotInfo: String, position: Int) {
if(isError) {
binding.radiobutton.setBackgroundResource(R.drawable.red_circle)
} else {
binding.radiobutton.setBackgroundResource(R.drawable.purple_circle)
}
}
Я обновляю статус isError
переменной внутри класса activity при условии ошибки с последующим вызовом notifyDataSetChanged()
.
Например,
fun checkForErrorCondition() {
if(errorCondition) {
adapter.isError = true
adapter.notifyDataSetChanged()
}
}
Дополнительная информация:
Условие ошибки устанавливается внутри класса ViewModel с помощью MutableLiveData и наблюдается внутри действия. Всякий раз, когда возникает условие ошибки, то есть переключатели остаются непроверенными, checkForErrorCondition
метод вызывается внутри действия, и адаптер обновляет ресурс для рисования / фона переключателей.