Как работать с RecyclerView? – Devcolibri – Android для начинающих

Как работать с RecyclerView?

Объяснение лямбда-выражений

RecyclerView – это компонент пользовательского интерфейса, который позволяет нам создавать прокручиваемый список. Он был представлен в Android Lollipop, и это своего рода ListView2.

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

  • RecyclerView, который мы должны добавить в layout нашего экрана;
  • layout для каждой строки списка;
  • адаптер, который содержит данные и связывает их со списком.
Android программирование для начинающих Хотите прокачаться в Android, но не знаете, где найти качественный материал? Пройдите несколько бесплатных уроков нашего курса и получите полный доступ с 50% скидкой.

Как создать RecyclerView?

Прежде чем мы это сделаем, нам нужно добавить зависимость в build.gradle файл.

dependencies {
    implementation 'com.android.support:recyclerview-v7:27.0.0'    
}

Не забудьте обновить версию библиотеки до последней. Вы можете проверить её здесь. Теперь мы можем добавить RecyclerView в layout.

Добавление RecyclerView в layout activity_main.xlm:

Добавление RecyclerView в layout activity_main.xlm

Создание RecyclerView в Activity:

Создание RecyclerView в Activity

В созданном экземпляре RecyclerView мы должны установить LayoutManager. Следуя документации:

LayoutManager отвечает за позиционирование view-компонентов в RecyclerView, а также за определение того, когда следует переиспользовать view-компоненты, которые больше не видны пользователю.

Таким образом, это означает, что LayoutManager отображает список в определённой форме. В этом примере мы использовали LinearLayoutManager, который показывает данные в простом списке – вертикальном или горизонтальном (по умолчанию вертикальном). Но это можно очень просто изменить, использовав другой LayoutManager. Например GridLayoutManager, StaggeredGridLayoutManager или WearableLinearLayoutManager.Отлично, теперь мы создадим layout для каждой строки списка.

Как создать layout для строки списка?

Так же как и любой другой layout.

Создание layout для строки списка

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

Предупреждающее сообщение Android Studio

В этом случае мы могли бы использовать атрибут android:drawableStart в TextView, но тогда изображение должно было бы иметь надлежащий размер. С другой стороны, ImageView дает мне больше возможностей, и я смог легко изменить размер изображения – я хотел сделать это как можно проще.В LinearLayout используется атрибут android:padding. Если вы не знакомы с этим атрибутом, вы можете взглянуть на мою короткую статью об этом.Теперь мы должны создать адаптер.

Как создать адаптер?

Пример адаптера RecyclerView:

Пример адаптера RecyclerView

Мы должны создать класс, который расширяет RecyclerView.Adapter, который в качестве параметра принимает класс, который расширяет RecyclerView.ViewHolder. Также необходимо переопределить некоторые требуемые методы.Что делают эти методы?

  • getItemCount() возвращает общее количество элементов списка. Значения списка передаются с помощью конструктора.
  • onCreateViewHolder() создает новый объект ViewHolder всякий раз, когда RecyclerView нуждается в этом. Это тот момент, когда создаётся layout строки списка, передается объекту ViewHolder, и каждый дочерний view-компонент может быть найден и сохранен.
  • onBindViewHolder() принимает объект ViewHolder и устанавливает необходимые данные для соответствующей строки во view-компоненте. Весь код выглядит так.

Пример реализации RecyclerView:

Пример реализации RecyclerView

Можем запустить проект и увидеть результат.

Можем запустить проект и увидеть результат

Почему нам нужен паттерн ViewHolder?

Короче говоря, ViewHolder предотвращает ненужные вызовы findViewById(). Если вы не знакомы с этим шаблоном, я рекомендую вам взглянуть на мой пример реализации списка с помощью ListView. Я считаю, что это лучший способ узнать, для чего необходим этот паттерн и какие потенциальные проблемы он решает. Если layout строки списка не создаётся для каждой строки, тогда сколько раз на самом деле он создаётся? Сколько раз вызываются методы onCreateViewHolder() и onBindViewHolder()?

Как RecyclerView переиспользует view-компоненты?

Чтобы проверить это, мы поместим несколько логов в наш код.

Логи

Хорошо, давайте посмотрим, что происходит.

Вызовы методом

Как вы видите, вызывается метод onCreateViewHolder() и объекты ViewHolder создаются для нескольких первых view-компонентов, а затем они переиспользуются, и адаптер просто привязывает данные при помощи метода onBindViewHolder(). Благодаря этому список очень эффективен, и пользователь может прокручивать список плавно, потому что наиболее тяжёлые операции (создание и поиск элементов view-компонентов) происходят внутри метода onCreateViewHolder(). Вот и всё!

Android программирование для начинающих Хотите прокачаться в Android, но не знаете, где найти качественный материал? Пройдите несколько бесплатных уроков нашего курса и получите полный доступ с 50% скидкой.

Перевод статьи «How to implement a RecyclerView?»

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

81567
10/01/2018

2 комментариев к статье "Как работать с RecyclerView?"

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)