Настройте динамический список Часть 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 .
Настройте динамический список Часть 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 .