赞
踩
官方入门教程:https://developer.android.com/codelabs/android-paging-basics?hl=zh-cn#10
大致总结如下:
一、目的和好处
分页加载数据(性能好)、无需大量代码(高效)
二、核心组件
1、PagingSource:数据源类,主要提供两个方法:getRefreshKey和load,其中前者是当pagingsource失效后得到用以创建一个新pagingsource的key。
以下两种原因之一会导致 Paging 库中发生失效:
PagingAdapter
调用了 refresh()
。PagingSource
调用了 invalidate()
。load方法用以加载数据,返回结果LoadResult,LoadResule有三个参数,分别是data(加载的数据源)、prevKey(加载页面前一页的第一个索引)、nextKey(加载页面后一页的第一个索引)
2、PagingData
用于存储分页数据的容器。每次数据刷新都会有一个相应的单独 PagingData
发送,并由其自己的 PagingSource
提供支持
3、PagingConfig
PagingConfig
- 用于定义确定分页行为的形参的类。这包括页面大小、是否启用占位符等
4、PagingDataAdapter
用于在 RecyclerView
中呈现 PagingData
的 RecyclerView.Adapter
子类。PagingDataAdapter
可以使用工厂方法连接到 Kotlin Flow
、LiveData
、RxJava Flowable
、RxJava Observable
甚至静态列表。PagingDataAdapter
会监听内部 PagingData
加载事件,并在网页加载时高效更新界面
5、Pager
Pager
- 负责生成 PagingData
流的类。这取决于 PagingSource
,因此应在 ViewModel
中创建。
下面是我写的简单生成PagingData的代码:
- val items:Flow<PagingData<Article>>=Pager(
- config=PagingConfig(pageSize=50,enablePlaceholders=false),
- pagingSourceFactory={repository.articlePagingSource()}
- ).flow.cachedIn(viewModelScope)
然后在activity中提交flow中的pagingData数据到adapter中即可:
- lifecycleScope.launch {
- // We repeat on the STARTED lifecycle because an Activity may be PAUSED
- // but still visible on the screen, for example in a multi window app
- repeatOnLifecycle(Lifecycle.State.STARTED) {
- items.collectLatest {
- articleAdapter.submitData(it)
- }
- }
- }
以上就是paging学习的简单总结
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。