使用列表和 Paging 延迟加载数据

借助延迟加载和 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: 此可组合项用于高效显示大型项目列表(消息)。它仅渲染屏幕上可见的项目,从而节省了资源和内存。
  • The lazyPagingItems object efficiently manages the loading and presentation of paged data within the LazyColumn. It passes LazyPagingItems to items in the LazyColumn composable.
  • MessageRow(message: Text) 负责渲染单个消息项目,可能会在 Card 中显示消息的发送者和文本。
  • MessagePlaceholder() 在获取实际消息数据的同时提供一个视觉占位符(加载微调器),从而增强了用户体验。

结果

以下视频显示了当用户滚动时,大型列表获取数据的行为结果。

包含此指南的精选集

本指南是以下涵盖更广泛 Android 开发目标的精选快速指南合集的一部分:

列表和网格让您的应用能够以视觉上令人愉悦且易于用户使用的形式显示精选集。
了解可组合函数如何让您轻松创建基于 Material Design 设计系统的精美 UI 组件。
此系列视频介绍了各种 Compose API,快速展示了可用的内容以及如何使用它们。

有问题或反馈?

请访问我们的常见问题页面,了解快速指南,或联系我们并告诉我们您的想法。