Paging 库概览 Android Jetpack 的一部分。
Paging 库可帮助您加载和显示来自本地存储或网络中更大的数据集中的数据页面。此方法可让您的应用更高效地利用网络带宽和系统资源。Paging 库的组件旨在契合推荐的 Android 应用架构,流畅集成其他 Jetpack 组件,并提供一流的 Kotlin 支持。
使用 Paging 库的优势
Paging 库包含以下功能:
- 分页数据的内存中缓存。该功能有助于确保您的应用在处理分页数据时高效使用系统资源。
- 内置的请求去重功能,可确保您的应用高效利用网络带宽和系统资源。
- 内置对 Kotlin 协程、数据流和 Jetpack Compose 的支持。
- 内置对错误处理功能的支持,包括刷新和重试功能。
- 专用测试实用程序(例如
TestPager和asSnapshot),用于验证分页源和数据转换。
设置
如需将 Paging 组件导入到 Android 应用中,请将以下依赖项添加到应用的 build.gradle 文件中:
Kotlin
dependencies { val paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation("androidx.paging:paging-runtime:$paging_version") // Needed to collect PagingData flows in Jetpack Compose implementation("androidx.paging:paging-compose:$paging_version") // Needed to test PagingSource and PagingData transformations in isolation testImplementation("androidx.paging:paging-testing:$paging_version") }
Groovy
dependencies { def paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation "androidx.paging:paging-runtime:$paging_version" // Needed to collect PagingData flows in Jetpack Compose implementation "androidx.paging:paging-compose:$paging_version" // Needed to test PagingSource and PagingData transformations in isolation testImplementation "androidx.paging:paging-testing:$paging_version" }
库架构
Paging 库的组件在应用的三个层运行:
- 代码库层
ViewModel层- 界面层
本部分介绍了在每个层运行的 Paging 库组件以及它们如何协作加载和显示分页数据。
代码库层
代码库层中的主要 Paging 库组件是 PagingSource。每个 PagingSource 对象都定义了数据源,以及如何从该数据源检索数据。PagingSource 对象可以从任何单个数据源(包括网络来源和本地数据库)加载数据。
您可能使用的另一个 Paging 库组件是 RemoteMediator。RemoteMediator 对象会处理来自分层数据源(例如具有本地数据库缓存的网络数据源)的分页。
ViewModel 层
Pager 组件提供了一个公共 API,用于根据 PagingSource 对象和 PagingConfig 配置对象,构建在响应式流中公开的 PagingData 实例。
将 ViewModel 层连接到界面的组件是 PagingData。PagingData 对象是分页数据快照的容器。它会查询 PagingSource 对象并存储结果。
界面层
主要的 Paging 界面 API 是 collectAsLazyPagingItems()。它会将分页项公开为数据列表,这些数据可轻松供 Compose 的延迟布局组件(例如 LazyColumn 和 LazyRow)使用。
添加 androidx.paging:paging-compose 库,以使用与 Compose 兼容的 API,让界面自动响应数据加载、更新和错误,而无需使用适配器或差异逻辑。对 Flow<PagingData> 使用 collectAsLazyPagingItems() 扩展函数,以将返回的 LazyPagingItems 传入 LazyColumn 中的 items()。
@Composable fun MessageList(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() } } } }
如需了解详情,请参阅大型数据集(分页)。
为你推荐
- 注意:当 JavaScript 处于关闭状态时,系统会显示链接文字
- 加载并显示分页数据
- 迁移到 Paging 3
- 从网络和数据库分页