使用列表和分页懒加载数据

通过懒加载和分页,您可以通过增量加载和显示数据来支持应用中的大型项目列表(包括无限列表)。此技术使您可以减少初始加载时间并优化内存使用率,从而提高性能。

版本兼容性

此实现要求您的项目 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 传递给 itemsLazyColumn 可组合项中。
  • MessageRow(message: Text) 负责渲染单个消息项目,可能在卡片内显示消息的发送者和文本。
  • MessagePlaceholder() 在实际消息数据正在获取时提供视觉占位符(加载微调器),从而增强用户体验。

结果

A large list fetching data as the user scrolls
图 1. 使用分页库在用户滚动时获取数据的长列表。

包含本指南的集合

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

列表和网格允许您的应用以用户易于理解的直观形式显示集合。
了解可组合函数如何使您能够轻松创建基于 Material Design 设计系统的漂亮 UI 组件。
本系列视频介绍了各种 Compose API,快速向您展示可用的内容以及如何使用它们。

有问题或反馈?

访问我们的常见问题页面,了解快速指南,或与我们联系,让我们知道您的想法。