Не понимаю как пройти по всем checkbox'ам в recyclerview

Собираюсь проходить по всем checkbox'ам, которые находятся в recyclerview для того чтобы проверять их на то выбран он или нет.

Пытаюсь обращаться к checkbox таким образом:

val element = recyclerview.getChildAt(i).checkbox as CheckBox. 

Он впринципе работает, но когда recyclerView содержит много элементов, что они выходят за пределы экрана, то он просто не видит остальные элементы.

Прохожу по recyclerview таким способом:

for(i: Int in 0 until recyclerview.size)

Ответы (1 шт):

Автор решения: Sergei Buvaka

Вы не сможете пройти RecyclerView по его всем элементам т.к. RecyclerView реализует паттерн ViewHolder. Суть паттерна в том, чтоб в каждый момент времени хранить в себе тольк те View которые видны пользователю и парочку соседних. А значит хранить в себе их он не может.

Вашу проблему можно решить следующим способом:

  • Создаете модель для вашего RecyclerView которая будет в себе хранить данные, нужные для вашего заполнения вашего item-а и флаг isChecked:

    class ListItem(
    
        val data: SomeObject, 
    
        var isChecked: Boolean
    )
    
  • Внутри вашего RecyclerView вы храните список этих моделей. При каждом изменении вашего CheckBox-a вы изменяете в вашем списке флаг isChecked по нужной позиции.

  • Далее все что вам нужно - это пройтись по этому списку и проверить ваши CheckBox-ы. Если это снаружи адаптера - напишите свой метод для получения этого списка.

→ Ссылка