Ленивая загрузка данных с помощью списков и пейджинга

Благодаря отложенной загрузке и пейджингу вы можете поддерживать в своем приложении большие списки элементов, в том числе бесконечные, путем постепенной загрузки и отображения данных. Этот метод позволяет сократить время начальной загрузки и оптимизировать использование памяти, повышая производительность.

Совместимость версий

Для этой реализации требуется, чтобы в minSDK вашего проекта был установлен уровень API 21 или выше.

Зависимости

Отображать постраничный контент

С помощью библиотеки подкачки вы можете загружать и отображать страницы данных из более крупного набора данных, полученного из локального хранилища или по сети. Используйте следующий код, чтобы отобразить список с разбивкой на страницы, в котором отображается индикатор выполнения, указывающий пользователю, что извлекается больше данных:

@Composable
fun MessageList(
    modifier: Modifier,
    pager: Pager<Int, Message>
) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
    @Composable
    fun MessagePlaceholder(modifier: Modifier) {
        Box(
            Modifier
                .fillMaxWidth()
                .height(48.dp)
        ) {
            CircularProgressIndicator()
        }
    }

    @Composable
    fun MessageRow(
        modifier: Modifier,
        message: Message
    ) {
        Card(modifier = Modifier.padding(8.dp)) {
            Column(
                modifier = Modifier.padding(8.dp),
                verticalArrangement = Arrangement.Center
            ) {
                Text(message.sender)
                Text(message.text)
            }
        }
    }
}

Ключевые моменты о коде

  • LazyColumn : этот составной элемент используется для эффективного отображения большого списка элементов (сообщений). Он отображает только те элементы, которые видны на экране, тем самым экономя ресурсы и память.
  • Объект lazyPagingItems эффективно управляет загрузкой и представлением постраничных данных в LazyColumn . Он передает LazyPagingItems items компонуемого LazyColumn .
  • MessageRow(message: Text) отвечает за отображение отдельных элементов сообщения, вероятно, отображая отправителя и текст сообщения внутри карты.
  • MessagePlaceholder() предоставляет визуальный заполнитель (индикатор загрузки) во время извлечения фактических данных сообщения, улучшая взаимодействие с пользователем.

Результаты

В следующем видео показано поведение большого списка, извлекающего данные при прокрутке пользователем.

Коллекции, содержащие это руководство

Это руководство является частью тщательно подобранной коллекции быстрых руководств, охватывающих более широкие цели разработки Android:

Списки и сетки позволяют вашему приложению отображать коллекции в визуально приятной форме, удобной для использования пользователями.
Узнайте, как компонуемые функции позволяют легко создавать красивые компоненты пользовательского интерфейса на основе системы дизайна Material Design.
В этой серии видеороликов представлены различные API Compose, быстро показано, что доступно и как их использовать.

Есть вопросы или отзывы

Перейдите на нашу страницу часто задаваемых вопросов и узнайте о кратких руководствах или свяжитесь с нами и сообщите нам свои мысли.