Программирование • 21 сентября 2023 • 5 мин чтения

Списки и сетки: как инструмент RecyclerView помогает Android-разработчикам отображать данные

В приложениях на Android часто нужно показывать пользователю большие объёмы данных: списки контактов, товаров и картинок. За показ таких крупных коллекций отвечает RecyclerView.

Что такое RecyclerView

Одна из особенностей большинства устройств на Android — небольшой размер экрана. И на этом небольшом экране часто нужно отобразить большой объём информации: много картинок в галерее, полный каталог товаров, список музыкальных треков. Чтобы это сделать, нужно настроить отображение по блокам, плавную прокрутку, группировку элементов. Кроме того, важно, чтобы объёмный список не слишком нагружал ресурсы устройства — иначе оно просто будет зависать.

Чтобы решить все эти задачи, существует RecyclerView. Это компонент пользовательского интерфейса — то есть элемент, который можно добавить в интерфейс для удобного отображения списка. Он встраивается в код и уже содержит инструменты для отображения, анимации и оптимизации списка, а также поддерживает настройки для кастомизации.

Кроме прочего RecyclerView позволяет повысить производительность при работе со списками большого размера. Вот как это работает. С точки зрения работы приложения каждому элементу списка соответствует отдельный объект, который занимает определённую область в памяти устройства. Представим, что нужно отобразить в соцсети ленту из нескольких сотен постов. Если бы для каждого создавался отдельный объект, в какой-то момент смартфон бы перестал справляться с хранением такого огромного объёма информации.

Принцип работы RecyclerView основывается на простой идее — не нужно хранить в памяти объекты для отображения тех элементов списка, которые пользователь не видит в данный момент. Когда человек прокручивает список, верхняя его часть скрывается за пределами экрана, а нижняя — появляется. И как только элемент пропадает из области видимости, объект, который использовался для его отображения, не хранит ненужную пользователю в данный момент информацию. Вместо этого он «переиспользуется», чтобы показать на экране элемент, появившийся внизу.

Это позволяет не загружать память всем списком, а тратить ресурсы только на то, что реально отображается сейчас на экране.

RecyclerView делает так, что при прокрутке элементы плавно сменяют друг друга — верхний исчезает, а нижний появляется. Кроме того, в логике приложения память, которую занимает верхний элемент, очищается и заполняется данными нижнего, вновь появившегося элемента

Компоненты RecyclerView

Сам RecyclerView умеет только отображать элементы в гибкой и масштабируемой сетке. Его работу обеспечивают дополнительные компоненты:

  • ViewHolder. Объект, который определяет, как именно должен выглядеть элемент списка на экране. Также он отображает передаваемые в него данные: изображение в галерее, текст, кнопки и иконки как в ленте соцсетей. Именно экземпляры ViewHolder переиспользуются при исчезновении элементов списка из области видимости.
  • Adapter. Соединяет между собой данные, которые нужно поместить в список, и непосредственно RecyclerView. Именно Adapter передает в RecyclerView элементы списка и управляет созданием и переиспользованием их в ViewHolder и определением количества элементов списка.
  • LayoutManager. Отвечает за правильное размещение и отображение элементов списка на экране в зависимости от макета. Также обеспечивает правильную прокрутку списков.

На схеме показано, как компоненты RecyclerView взаимодействуют с данными. Когда требуется создать новую позицию элемента, LayoutManager от имени RecyclerView вызывает Adapter, а тот в свою очередь обращается к данным и затем создает экземпляр ViewHolder

Чтобы создавать списки с помощью RecyclerView, важно уметь правильно работать со всеми его компонентами. Этому в том числе учатся студенты на курсе «Android-разработчик».

Как работает RecyclerView

Если рассматривать процесс работы RecyclerView по шагам, он происходит так:

  1. RecyclerView запрашивает у своего адаптера экземпляр класса ViewHolder, который будет использоваться для представления элемента списка.
  2. Адаптер вызывает метод onCreateViewHolder(), в котором он создаёт новый экземпляр ViewHolder и связывает его с макетом элемента списка.
  3. RecyclerView получает ViewHolder от адаптера и сохраняет его.
  4. RecyclerView вызывает метод onBindViewHolder() адаптера для заполнения данных в ViewHolder.
  5. ViewHolder сохраняет данные и обновляет своё представление (например, текстовое поле или изображение) в соответствии с этими данными.
  6. RecyclerView помещает ViewHolder на правильное место в списке и отображает его на экране.
  7. При прокрутке списка RecyclerView извлекает элементы, которые уже не видны на экране, и переиспользует их ViewHolder для новых элементов.

Этот процесс при необходимости повторяется при прокрутке списка: RecyclerView создаёт новые элементы и переиспользует старые ViewHolder для оптимизации использования ресурсов и повышения производительности.

Примеры использования RecyclerView

Практически любое приложение на Android, в котором есть список, — пример использования RecyclerView. Это может быть:

  • список контактов;
  • список задач;
  • фотогалерея;
  • список новостей;
  • каталог товаров;
  • лента постов в социальной сети;
  • набор виджетов.

Совет эксперта

Сергей Сорокин

Залог правильного понимания механизма работы и эффективного использования RecyclerView — хорошее знание основ ООП. Именно здесь в рациональном сочетании используются все ключевые принципы этой парадигмы. Важно больше практиковаться и начинать осваивать RecyclerView с создания простейших списков. Это поможет понять все его особенности и настраивать компоненты осознанно. RecyclerView — мощный инструмент, который при совершенном владении позволит создавать не только списки, но и сложные экраны, отображающие большое количество разнотипных данных.

Статью подготовили:
Сергей Сорокин
Яндекс Практикум
Автор курса по мобильной разработке (Android)
Яндекс Практикум
Редактор
Полина Овчинникова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Идеи новогодних подарков от нейросети + промокоды на курсы Практикума и акции от партнеров
Tue Jul 30 2024 14:07:09 GMT+0300 (Moscow Standard Time)