Ленивая загрузка данных со списками и разбиением на страницы

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

Результаты

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

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

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

Связанные запросы

Как показывать контент, разбитый на страницы

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

@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. Эта composable-функция используется для эффективного отображения большого списка элементов (сообщений). Он отображает только те элементы, которые видны на экране, тем самым экономя ресурсы и память.
  • Объект lazyPagingItems эффективно управляет загрузкой и представлением постраничных данных в LazyColumn. Она передает LazyPagingItems в items в composable-функции LazyColumn.
  • MessageRow(message: Text) отвечает за отображение отдельных сообщений, вероятно, показывая отправителя и текст сообщения на карточке.
  • MessagePlaceholder() предоставляет визуальный плейсхолдер (индикатор загрузки), пока извлекаются фактические данные сообщения, что улучшает пользовательский опыт.

Подборки, в которые входит это руководство

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

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

Есть вопросы или хотите оставить отзыв?

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