Одна из особенностей большинства устройств на Android — небольшой размер экрана. И на этом небольшом экране часто нужно отобразить большой объём информации: много картинок в галерее, полный каталог товаров, список музыкальных треков. Чтобы это сделать, нужно настроить отображение по блокам, плавную прокрутку, группировку элементов. Кроме того, важно, чтобы объёмный список не слишком нагружал ресурсы устройства — иначе оно просто будет зависать.
Чтобы решить все эти задачи, существует RecyclerView. Это компонент пользовательского интерфейса — то есть элемент, который можно добавить в интерфейс для удобного отображения списка. Он встраивается в код и уже содержит инструменты для отображения, анимации и оптимизации списка, а также поддерживает настройки для кастомизации.
Кроме прочего RecyclerView позволяет повысить производительность при работе со списками большого размера. Вот как это работает. С точки зрения работы приложения каждому элементу списка соответствует отдельный объект, который занимает определённую область в памяти устройства. Представим, что нужно отобразить в соцсети ленту из нескольких сотен постов. Если бы для каждого создавался отдельный объект, в какой-то момент смартфон бы перестал справляться с хранением такого огромного объёма информации.
Принцип работы RecyclerView основывается на простой идее — не нужно хранить в памяти объекты для отображения тех элементов списка, которые пользователь не видит в данный момент. Когда человек прокручивает список, верхняя его часть скрывается за пределами экрана, а нижняя — появляется. И как только элемент пропадает из области видимости, объект, который использовался для его отображения, не хранит ненужную пользователю в данный момент информацию. Вместо этого он «переиспользуется», чтобы показать на экране элемент, появившийся внизу.
Это позволяет не загружать память всем списком, а тратить ресурсы только на то, что реально отображается сейчас на экране.
RecyclerView делает так, что при прокрутке элементы плавно сменяют друг друга — верхний исчезает, а нижний появляется. Кроме того, в логике приложения память, которую занимает верхний элемент, очищается и заполняется данными нижнего, вновь появившегося элемента
Сам RecyclerView умеет только отображать элементы в гибкой и масштабируемой сетке. Его работу обеспечивают дополнительные компоненты:
На схеме показано, как компоненты RecyclerView взаимодействуют с данными. Когда требуется создать новую позицию элемента, LayoutManager от имени RecyclerView вызывает Adapter, а тот в свою очередь обращается к данным и затем создает экземпляр ViewHolder
Чтобы создавать списки с помощью RecyclerView, важно уметь правильно работать со всеми его компонентами. Этому в том числе учатся студенты на курсе «Android-разработчик».
Если рассматривать процесс работы RecyclerView по шагам, он происходит так:
Этот процесс при необходимости повторяется при прокрутке списка: RecyclerView создаёт новые элементы и переиспользует старые ViewHolder для оптимизации использования ресурсов и повышения производительности.
Практически любое приложение на Android, в котором есть список, — пример использования RecyclerView. Это может быть:
Читать также: