-
Notifications
You must be signed in to change notification settings - Fork 0
RecyclerView
RecyclerView - это современная реализация списка в Android.
Основная концепция этого виджета - это переиспользование ViewHolder'ов для экономии памяти устройства (ListView держит в памяти все свои элементы, в т.ч. и их представления).
Для реализации этого переиспользования необходимо создать адаптер для RecyclerView, наследующий RecyclerView.Adapter<T>. В теле адаптера нас интересуют 3 метода, обязательных к переопределению:
-
onCreateView- он создаетViewHolder'ы нужного типа, "раздувая" нужные разметки и передавая вновь созданнуюViewв конструкторViewHolder'а -
onBindViewHolder- этот метод вызывается, когда необходимо "привязать"ViewHolderк данным на конкретной позиции -
getItemCount- этот метод возвращает количество ячеек, которое будет содержать визуальноRecyclerView
Для определения типа ячейки, которую нужно создать, есть также метод:
getItemViewType, возвращающий целочисленное значение, на которое можно ориентироваться в методе onCreateView
Данный подход предоставляет широкий набор возможностей работы со списком, как то:
- Создание элементов разных типов в одном списке
- Обновление данных, как полное (
notifyDataSetChanged()), так и частичное, с поддержкой анимации обновления - Перемещение карточек на другую позицию списка
- Смахивание карточек жестом с соответствующем Callback'ом
- Поддержка кастомных Payload'ов для частичной смены данных в карточке
- Работа с вложенными и дочерними списками. Работа с
CoordinatorLayoutиз коробки
Нажатия на элементы ViewHolder'а обрабатываются также, как и на обычные View, но в теле каждого OnClickListener'а содержится вызов слушателя, который мы определяем в базовом классе, и который все клики доставляет туда, где мы его реализуем. В основном, это главные разметки, в которых располагается RecyclerView - Fragment, Activity
Для полноценной работы нужны три объекта:
- Экземпляр
RecyclerViewв разметке - Установленный
LayoutManager(можно определить через разметкуRecyclerViewс помощью атрибутаapp:layout_manager) - Установленный адаптер
Пример явной установки:
val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = CustomRecyclerAdapter()LayoutManager отвечает за расположение и перемещение ячеек в RecyclerView. Есть стандартные реализации:
- LinearLayoutManager - линейное отображение, друг за другом. Можно поменять ориентацию, чтобы начало списка было вверху или внизу
- GridLayoutManager - отображение в виде плитки, но с равными размерами
- StaggeredGridLayoutManager - отображение в виду плитки, размеры ячеек могут быть неравными
Дополнительные материалы:
Образовательное чтиво о системе Android и её внутреннем устройстве. Может сильно напрячь мозг неподготовленному читателю