Настройка динамического списка . Часть 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
и его подклассы, такие какUri
-
String
-
Long
Подробные сведения о типах клавиш выбора см. в
SelectionTracker.Builder
. -
- Внедрите
ItemDetailsLookup
. - Обновите объекты
View
элемента вRecyclerView
, чтобы отразить, выбирает ли пользователь их или отменяет их выбор.Библиотека выбора не предоставляет визуальное оформление по умолчанию для выбранных элементов. Укажите это при реализации
onBindViewHolder()
. Мы рекомендуем следующий подход:- В
onBindViewHolder()
вызовитеsetActivated()
— а неsetSelected()
— для объектаView
сtrue
илиfalse
, в зависимости от того, выбран ли элемент. - Обновите стиль представления, чтобы отобразить активированный статус. Мы рекомендуем использовать ресурс списка состояний цвета для настройки стиля.
- В
- Используйте
ActionMode
, чтобы предоставить пользователю инструменты для выполнения действия над выделенным фрагментом. - Выполните любые интерпретированные второстепенные действия.
- Соберите все с помощью
SelectionTracker.Builder
. - Включите выбор в события жизненного цикла действия .
ItemDetailsLookup
позволяет библиотеке выбора получать доступ к информации об элементах RecyclerView
, заданных MotionEvent
. По сути, это фабрика для экземпляров ItemDetails
, резервная копия которых создается или извлекается из экземпляра RecyclerView.ViewHolder
.
Зарегистрируйте SelectionTracker.SelectionObserver
, чтобы получать уведомления при изменении выбора. При первом создании выбора запустите ActionMode
, чтобы представить его пользователю и выполнить действия, специфичные для выбора. Например, вы можете добавить кнопку удаления на панель ActionMode
и соединить стрелку назад на панели, чтобы очистить выбор. Когда выбор становится пустым (если пользователь очищает выбор в последний раз), завершите режим действия.
В конце конвейера обработки событий библиотека может определить, что пользователь пытается активировать элемент, коснувшись его, или пытается перетащить элемент или набор выбранных элементов. Реагируйте на эти интерпретации, регистрируя соответствующего прослушивателя. Дополнительные сведения см. в SelectionTracker.Builder
.
В следующем примере показано, как соединить эти части:
Котлин
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Ява
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
Чтобы создать экземпляр SelectionTracker
, ваше приложение должно предоставить тот же RecyclerView.Adapter
, который вы используете для инициализации RecyclerView
для SelectionTracker.Builder
. По этой причине после создания экземпляра SelectionTracker
внедрите его в свой RecyclerView.Adapter
. В противном случае вы не сможете проверить выбранный статус элемента с помощью метода onBindViewHolder()
.
Чтобы сохранить состояние выбора в событиях жизненного цикла действия, ваше приложение должно вызывать методы onSaveInstanceState()
и onRestoreInstanceState()
средства отслеживания выбора из методов действия onSaveInstanceState()
и onRestoreInstanceState()
соответственно. Ваше приложение также должно предоставить уникальный идентификатор выбора конструктору SelectionTracker.Builder
. Этот идентификатор необходим, поскольку действие или фрагмент могут иметь более одного отдельного выбираемого списка, каждый из которых должен сохраняться в сохраненном состоянии.
Дополнительные ресурсы
Дополнительные сведения см. в следующих ссылках.
- Демо-приложение Sunflower , использующее
RecyclerView
. - Используйте RecyclerView для отображения кодовой лаборатории прокручиваемого списка .
- Основы Android Kotlin: кодовая лаборатория RecyclerView .