Настройка динамического списка . Часть 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 и соединить стрелку «назад» на панели для очистки выделения. Когда выделение станет пустым — если пользователь очистил выделение в последний раз — завершите режим ActionMode.
В конце конвейера обработки событий библиотека может определить, что пользователь пытается активировать элемент, коснувшись его, или пытается перетащить элемент или набор выбранных элементов. Реагируйте на эти интерпретации, зарегистрировав соответствующий обработчик событий. Для получения дополнительной информации см. SelectionTracker.Builder .
Следующий пример показывает, как соединить эти детали:
Котлин
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() .
Для сохранения состояния выбора на протяжении всего жизненного цикла активности ваше приложение должно вызывать методы onSaveInstanceState() и onRestoreInstanceState() трекера выбора из методов onSaveInstanceState() и onRestoreInstanceState() активности соответственно. Ваше приложение также должно передать уникальный идентификатор выбора в конструктор SelectionTracker.Builder . Этот идентификатор необходим, поскольку активность или фрагмент могут иметь более одного отдельного выбираемого списка, и все они должны сохраняться в своем исходном состоянии.
Дополнительные ресурсы
Для получения дополнительной информации см. следующие источники.
- Демонстрационное приложение Sunflower , использующее
RecyclerView. - Используйте RecyclerView для отображения прокручиваемого списка в рамках учебного задания.
- Основы Android Kotlin: практическое занятие по основам RecyclerView .
