Настройка динамического списка Часть Android Jetpack.
Вы можете настраивать объекты RecyclerView в соответствии со своими потребностями. Стандартные классы, описанные в статье Создание динамических списков с помощью RecyclerView, предоставляют все функции, необходимые большинству разработчиков. Во многих случаях вам нужно только разработать представление для каждого держателя представления и написать код для обновления этих представлений соответствующими данными. Однако если у вашего приложения есть особые требования, вы можете изменить стандартное поведение несколькими способами.
В этом документе описаны некоторые возможные настройки.
Изменение макета
RecyclerView использует менеджер макетов для размещения отдельных элементов на экране и определения того, когда следует повторно использовать представления элементов, которые больше не видны пользователю. Чтобы повторно использовать или переработать представление, менеджер макета может попросить адаптер заменить содержимое представления другим элементом из набора данных. Повторное использование представлений таким образом повышает производительность, поскольку позволяет избежать создания ненужных представлений или выполнения ресурсоемких операций поиска findViewById(). Библиотека поддержки Android включает три стандартных менеджера макетов, каждый из которых предлагает множество вариантов настройки:
LinearLayoutManager: располагает элементы в одномерном списке. ИспользованиеRecyclerViewсLinearLayoutManagerобеспечивает функциональность, аналогичную макетуListView.GridLayoutManager– элементы располагаются в виде сетки, как клетки на шахматной доске. ИспользованиеRecyclerViewсGridLayoutManagerобеспечивает функциональность, аналогичную макетуGridView.StaggeredGridLayoutManager– элементы располагаются в виде двумерной сетки, в которой каждый столбец немного смещен относительно предыдущего, как звезды на американском флаге.
Если эти менеджеры макетов вам не подходят, вы можете создать собственный, расширив абстрактный класс RecyclerView.LayoutManager.
Добавьте анимацию объектов
При изменении элемента RecyclerView использует аниматор, чтобы изменить его внешний вид. Этот аниматор представляет собой объект, расширяющий абстрактный класс RecyclerView.ItemAnimator. По умолчанию RecyclerView использует DefaultItemAnimator для анимации. Если вы хотите использовать собственные анимации, вы можете определить собственный объект аниматора, расширив RecyclerView.ItemAnimator.
Включить выбор элементов списка
Библиотека recyclerview-selection позволяет пользователям выбирать элементы в списке RecyclerView с помощью сенсорного ввода или мыши. Это позволяет вам контролировать визуальное представление выбранного элемента. Вы также можете управлять правилами, определяющими поведение при выборе, например какие элементы можно выбрать и сколько элементов можно выбрать.
Чтобы добавить поддержку выбора в экземпляр RecyclerView, выполните следующие действия:
- Определите, какой тип ключа выбора использовать, а затем создайте
ItemKeyProvider.Для идентификации выбранных элементов можно использовать три типа ключей:
Parcelableи его подклассы, напримерUriStringLong
Подробную информацию о типах ключей выбора можно найти в статье
SelectionTracker.Builder. - Реализуйте
ItemDetailsLookup. - Обновите объекты
ViewвRecyclerView, чтобы отразить, выбрал ли их пользователь.Библиотека выбора не предоставляет визуальное оформление по умолчанию для выбранных элементов. Укажите его при реализации
onBindViewHolder(). Мы рекомендуем следующий подход:- В
onBindViewHolder()вызовитеsetActivated()(неsetSelected()) для объектаViewсtrueилиfalseв зависимости от того, выбран ли элемент. - Обновите стиль представления, чтобы показать, что оно активировано. Для настройки стиля рекомендуем использовать ресурс списка состояний цвета.
- В
- Используйте
ActionMode, чтобы предоставить пользователю инструменты для выполнения действия с выбранным объектом. - Выполнять любые интерпретированные вторичные действия.
- Соберите все вместе с помощью
SelectionTracker.Builder. - Включите выбор в события жизненного цикла объекта activity.
ItemDetailsLookup позволяет библиотеке выбора получать доступ к информации об элементах RecyclerView, заданных MotionEvent.
По сути, это фабрика для экземпляров ItemDetails, которые поддерживаются экземпляром RecyclerView.ViewHolder или извлекаются из него.
Зарегистрируйте SelectionTracker.SelectionObserver, чтобы получать уведомления об изменении выбора. При создании выделения запустите ActionMode, чтобы показать его пользователю и предоставить действия, связанные с выделением. Например, вы можете добавить на панель ActionMode кнопку удаления и связать стрелку назад на панели с отменой выбора. Когда выбор становится пустым (если пользователь очищает выбор в последний раз), завершите режим действий.
В конце конвейера обработки событий библиотека может определить, что пользователь пытается активировать элемент, нажав на него, или пытается перетащить элемент или набор выбранных элементов. Чтобы реагировать на эти интерпретации, зарегистрируйте соответствующий прослушиватель. Подробную информацию можно найти в статье SelectionTracker.Builder.
Ниже показано, как объединить эти элементы.
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
Чтобы создать экземпляр SelectionTracker, ваше приложение должно передать в SelectionTracker.Builder тот же объект RecyclerView.Adapter, который вы используете для инициализации RecyclerView. Поэтому после создания экземпляра SelectionTracker внедрите его в RecyclerView.Adapter. В противном случае вы не сможете проверить статус выбора элемента с помощью метода onBindViewHolder().
Чтобы сохранить состояние выбора в событиях жизненного цикла объекта activity, приложение должно вызвать методы onSaveInstanceState() и onRestoreInstanceState() трекера выбора из методов onSaveInstanceState() и onRestoreInstanceState() объекта activity соответственно. Приложение также должно передавать конструктору SelectionTracker.Builder уникальный идентификатор выбора. Этот идентификатор необходим, поскольку у действия или фрагмента может быть несколько отдельных списков, которые нужно сохранить.
Дополнительные ресурсы
Дополнительную информацию можно найти в следующих источниках:
- Демонстрационное приложение Sunflower, в котором используется
RecyclerView. - Использование RecyclerView для отображения прокручиваемого списка.
- Практическая работа "Основы Kotlin для Android: основы RecyclerView".