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

В этой статье предполагается, что вы знаете о следующих компонентах:

  1. Что такое recyclerview в android.
  2. ViewHolder.
  3. Класс данных.
  4. Менеджеры по компоновке.

Диспетчеры компоновки - настоящая виновница, которая добавляет сложности

Вначале у меня было много проблем с пониманием функционирования и работы recyclerview. Самый распространенный вопрос: кто вызывает onCreateViewHolder () и onBindViewHolder ()? Это сам виджет? Это вызывает адаптер?

После тщательного изучения руководств для разработчиков Android я выяснил, почему я не смог обернуть голову вокруг сущности, которая называется recyclerview. Как вы можете догадаться из заголовка, это менеджер компоновки, который мы передаем нашему виджету recyclerview, который вызывает все эти функции в адаптере. Позвольте мне рассказать о том, что происходит в этом стеке вызовов:

  1. Наш виджет ‹RecyclerView› раздувается при настройке активности или фрагмента.
  2. Во время процедуры настройки мы добавляем менеджеры компоновки, адаптеры, декораторы элементов и т. Д. В наш recyclerview, чтобы сделать его более привлекательным. Мы также передаем dataSet, который будет использоваться адаптером для ввода информации в держатели просмотра на этом этапе .
  3. Теперь наш менеджер по расположению вычисляет размер экрана и устанавливает, что, скажем, для проецирования на экран требуется 10 зрителей. При этом он вызывает адаптер recyclerview onCreateViewHolder (parent, type), передавая родительский элемент и необходимый ему тип просмотра.
  4. onCreateViewHolder () выдает 10 пустых ViewHolder. Но у нас нет 10 пустых ViewHolder. Итак, теперь диспетчер макета вызывает onBindViewHolder (viewHolder, position), передавая пустой ViewHolder и позицию пустого ViewHolder на экране. Обратите внимание, как менеджер макета не знает, в каком месте находятся данные. Он просто возвращает позицию ViewHolders на экране.
  5. Вспомните набор данных, который мы передали адаптеру на шаге 2. Ну, это просто данные, которые будут представлены этими пустыми зрителями. С этого момента наша работа стала легкой. Все, что нам нужно сделать, это получить соответствующие данные в том месте, где находится соответствующий ViewHolder, и прикрепить эти данные к виджетам, присутствующим в ViewHolder.
  6. onBindViewHolder () начинает вводить информацию в эти пустые ViewHolder, и когда они вводятся, адаптер просто возвращает эти полные ViewHolder обратно в Layout Manager.
  7. Теперь диспетчер макета просто берет эти 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 на экране.