Как я могу изменить отображаемый src всех переключателей в RecyclerView?

#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 метод вызывается внутри действия, и адаптер обновляет ресурс для рисования / фона переключателей.