Раскрытие тайны работы ресайклерного представления

В этой статье предполагается, что вы знаете о следующих компонентах:
- Что такое recyclerview в android.
- ViewHolder.
- Класс данных.
- Менеджеры по компоновке.
Диспетчеры компоновки - настоящая виновница, которая добавляет сложности
Вначале у меня было много проблем с пониманием функционирования и работы recyclerview. Самый распространенный вопрос: кто вызывает onCreateViewHolder () и onBindViewHolder ()? Это сам виджет? Это вызывает адаптер?
После тщательного изучения руководств для разработчиков Android я выяснил, почему я не смог обернуть голову вокруг сущности, которая называется recyclerview. Как вы можете догадаться из заголовка, это менеджер компоновки, который мы передаем нашему виджету recyclerview, который вызывает все эти функции в адаптере. Позвольте мне рассказать о том, что происходит в этом стеке вызовов:
- Наш виджет ‹RecyclerView› раздувается при настройке активности или фрагмента.
- Во время процедуры настройки мы добавляем менеджеры компоновки, адаптеры, декораторы элементов и т. Д. В наш recyclerview, чтобы сделать его более привлекательным. Мы также передаем dataSet, который будет использоваться адаптером для ввода информации в держатели просмотра на этом этапе .
- Теперь наш менеджер по расположению вычисляет размер экрана и устанавливает, что, скажем, для проецирования на экран требуется 10 зрителей. При этом он вызывает адаптер recyclerview onCreateViewHolder (parent, type), передавая родительский элемент и необходимый ему тип просмотра.
- onCreateViewHolder () выдает 10 пустых ViewHolder. Но у нас нет 10 пустых ViewHolder. Итак, теперь диспетчер макета вызывает onBindViewHolder (viewHolder, position), передавая пустой ViewHolder и позицию пустого ViewHolder на экране. Обратите внимание, как менеджер макета не знает, в каком месте находятся данные. Он просто возвращает позицию ViewHolders на экране.
- Вспомните набор данных, который мы передали адаптеру на шаге 2. Ну, это просто данные, которые будут представлены этими пустыми зрителями. С этого момента наша работа стала легкой. Все, что нам нужно сделать, это получить соответствующие данные в том месте, где находится соответствующий ViewHolder, и прикрепить эти данные к виджетам, присутствующим в ViewHolder.
- onBindViewHolder () начинает вводить информацию в эти пустые ViewHolder, и когда они вводятся, адаптер просто возвращает эти полные ViewHolder обратно в Layout Manager.
- Теперь диспетчер макета просто берет эти ViewHolders и отображает их на экране.
Как только вы поймете, как выполняются вызовы, понять recyclerview станет очень легко.
Диспетчер макета вызывает → RecyclerView.Adapter, чтобы предоставить 10 ViewHolders.
RecyclerView.Adapter вызывает → onCreateViewHolder () для вывода 10 пустых ViewHolder.
RecyclerView.Adapter передает → 10 пустых ViewHolders обратно в Layout Manager.
LayoutManager вызывает → RecyclerView.Adapter для вставки данных в эти 10 пустых ViewHolders.
RecyclerView.Adapter вызывает → onBindViewHolder () для вставки данных в эти 10 пустых ViewHolder.
RecyclerView.Adapter передает → 10 полных ViewHolders обратно в Layout Manager.
Layout Manager отображает эти 10 полных ViewHolders на экране.