RecyclerView – это компонент пользовательского интерфейса, который позволяет нам создавать прокручиваемый список. Он был представлен в Android Lollipop, и это своего рода ListView2.
Если у нас есть возможность, то мы должны использовать его вместо ListView, потому что он заставляет нас использовать более эффективный способ реализации списка и разделяет зоны ответственности между классами. Чтобы реализовать RecyclerView, мы должны создать следующие компоненты:
- RecyclerView, который мы должны добавить в
layout
нашего экрана; layout
для каждой строки списка;- адаптер, который содержит данные и связывает их со списком.
Как создать RecyclerView?
Прежде чем мы это сделаем, нам нужно добавить зависимость в build.gradle
файл.
dependencies {
implementation 'com.android.support:recyclerview-v7:27.0.0'
}
Не забудьте обновить версию библиотеки до последней. Вы можете проверить её здесь. Теперь мы можем добавить RecyclerView в layout
.
Добавление RecyclerView в layout
activity_main.xlm:
Создание RecyclerView в Activity
:
В созданном экземпляре RecyclerView мы должны установить LayoutManager. Следуя документации:
LayoutManager отвечает за позиционирование view-компонентов в RecyclerView, а также за определение того, когда следует переиспользовать view-компоненты, которые больше не видны пользователю.
Таким образом, это означает, что LayoutManager отображает список в определённой форме. В этом примере мы использовали LinearLayoutManager, который показывает данные в простом списке – вертикальном или горизонтальном (по умолчанию вертикальном). Но это можно очень просто изменить, использовав другой LayoutManager. Например GridLayoutManager, StaggeredGridLayoutManager или WearableLinearLayoutManager.Отлично, теперь мы создадим layout
для каждой строки списка.
Как создать layout для строки списка?
Так же как и любой другой layout
.
layout
строки списка довольно прост – некоторое изображение и текст рядом с ним. Чтобы сделать это, мы использовали LinearLayout с горизонтальной ориентацией. Обратите внимание на предупреждение на LinearLayout. Оно говорит нам о том, что мы должны спроектировать наш layout
более эффективным способом.
В этом случае мы могли бы использовать атрибут android:drawableStart
в TextView, но тогда изображение должно было бы иметь надлежащий размер. С другой стороны, ImageView дает мне больше возможностей, и я смог легко изменить размер изображения – я хотел сделать это как можно проще.В LinearLayout используется атрибут android:padding
. Если вы не знакомы с этим атрибутом, вы можете взглянуть на мою короткую статью об этом.Теперь мы должны создать адаптер.
Как создать адаптер?
Пример адаптера RecyclerView:
Мы должны создать класс, который расширяет RecyclerView.Adapter, который в качестве параметра принимает класс, который расширяет RecyclerView.ViewHolder. Также необходимо переопределить некоторые требуемые методы.Что делают эти методы?
getItemCount()
возвращает общее количество элементов списка. Значения списка передаются с помощью конструктора.onCreateViewHolder()
создает новый объект ViewHolder всякий раз, когда RecyclerView нуждается в этом. Это тот момент, когда создаётсяlayout
строки списка, передается объекту ViewHolder, и каждый дочернийview
-компонент может быть найден и сохранен.onBindViewHolder()
принимает объект ViewHolder и устанавливает необходимые данные для соответствующей строки воview
-компоненте. Весь код выглядит так.
Пример реализации RecyclerView:
Можем запустить проект и увидеть результат.
Почему нам нужен паттерн ViewHolder?
Короче говоря, ViewHolder предотвращает ненужные вызовы findViewById()
. Если вы не знакомы с этим шаблоном, я рекомендую вам взглянуть на мой пример реализации списка с помощью ListView. Я считаю, что это лучший способ узнать, для чего необходим этот паттерн и какие потенциальные проблемы он решает. Если layout
строки списка не создаётся для каждой строки, тогда сколько раз на самом деле он создаётся? Сколько раз вызываются методы onCreateViewHolder()
и onBindViewHolder()
?
Как RecyclerView переиспользует view-компоненты?
Чтобы проверить это, мы поместим несколько логов в наш код.
Хорошо, давайте посмотрим, что происходит.
Как вы видите, вызывается метод onCreateViewHolder()
и объекты ViewHolder создаются для нескольких первых view
-компонентов, а затем они переиспользуются, и адаптер просто привязывает данные при помощи метода onBindViewHolder()
. Благодаря этому список очень эффективен, и пользователь может прокручивать список плавно, потому что наиболее тяжёлые операции (создание и поиск элементов view
-компонентов) происходят внутри метода onCreateViewHolder()
. Вот и всё!

Перевод статьи «How to implement a RecyclerView?»
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
2 комментариев к статье "Как работать с RecyclerView?"