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