Как добавить липкие заголовки в свои списки в Jetpack Compose

Jetpack Compose поставляется со встроенными функциями, которые ускоряют разработку. Одной из таких функций являются липкие заголовки. Но прежде чем мы рассмотрим липкие заголовки, давайте разберемся со списками в Jetpack Compose.

LazyColumn и LazyRow

Отображать списки на экране Jetpack Compose можно с помощью LazyColumn или LazyRow, в зависимости от требуемой ориентации — это их единственное отличие. Судя по их именам, они ленивы. Это означает, что они загружают только те элементы, которые видны в данный момент, и перерабатывают их, как только они прокручиваются за пределы экрана. Этот подход очень эффективен, особенно при работе с большими списками неизвестной длины.

Оба они принимают одни и те же параметры, некоторые из них:

  • state: LazyListStateобъект состояния, который будет использоваться для управления или наблюдения за состоянием списка
  • reverseLayout: Booleanменяет направление прокрутки и макета на противоположное.
  • horizontalArrangement: Arrangement.Horizontal — горизонтальное расположение дочерних элементов макета.
  • verticalAlignment: Alignment.Verticalвертикальное выравнивание, примененное к элементам
  • userScrollEnabled: Booleanразрешена ли прокрутка с помощью жестов пользователя или специальных возможностей.
  • content: LazyListScope.() -> Unitблок, описывающий содержимое списка.

Как вы могли заметить, содержимое списка находится в файле LazyListScope. Он не принимает напрямую @Composable функций. Вместо этого вам нужно использовать другие функции, чтобы сформулировать содержание.

Содержимое списка можно описать с помощью таких методов, как LazyListScope.item для добавления одного элемента или LazyListScope.items для добавления нескольких элементов. Затем внутри них вы можете вызывать @Composable функций.

Вот простой пример их использования:

item и items также примите параметр key, который должен быть уникальным ключом, представляющим элемент. Использование одного и того же ключа для нескольких элементов списка не допускается. Тип ключа должен сохраняться через Bundle на Android. Если передается null, позиция в списке будет представлять ключ.

Пока все хорошо, теперь пришло время поговорить о том, почему мы здесь, и это Sticky Headers.

Список закрепленных заголовков

При создании списка бывают моменты, когда мы хотим сгруппировать элементы по определенным категориям или заголовкам. В таких случаях эти заголовки должны быть «липкими», то есть они должны продолжать отображаться, когда пользователь прокручивает различные элементы в определенной категории. В традиционных макетах XML для реализации этой функции потребовался бы значительный объем кода и усилия.

К счастью, Jetpack Compose значительно облегчает эту задачу. В рамках содержания нашего списка мы просто заменяем использование методов item или items на метод stickyHeader для заголовков. Эта гениальная функция делает за нас тяжелую работу, создавая липкий заголовок с минимальным кодом.

Как и методы item или items, stickyHeader также принимает ключ. Этот ключ служит той же цели, что и в методах item или items — он помогает компилятору идентифицировать элементы в списке. Этот механизм особенно удобен при работе с большими динамическими списками, поскольку обеспечивает эффективную рекомпозицию.

Итак, вот краткий пример, чтобы вы могли лучше понять это:

Довольно круто, верно? Это простой вызов функции, и вся тяжелая работа уже сделана.

Заключение

В заключение, Jetpack Compose продолжает революционизировать наш подход к разработке пользовательского интерфейса для Android, делая его более интуитивно понятным и менее громоздким. Функции LazyColumn и LazyRow упрощают отображение списков, независимо от их ориентации или размера. Кроме того, использование stickyHeader упрощает создание липких заголовков, задача, традиционно связанная со значительными усилиями по кодированию.

Jetpack Compose зарекомендовал себя как бесценный инструмент в наборе инструментов любого разработчика, беря на себя тяжелую работу и позволяя разработчикам сосредоточиться на создании уникальных и эффективных пользовательских интерфейсов. Независимо от того, являетесь ли вы ветераном разработки Android или только начинаете свой путь, нельзя отрицать простоту и эффективность, которые предлагает Jetpack Compose. Удачного кодирования!

Вы можете найти весь исходный код в моем репозитории GitHub.

Want to Connect?

GitHub
LinkedIn
Twitter
Portfolio website

Если вы хотите узнать больше о Jetpack Compose, ознакомьтесь с этими статьями: