Android Paging组件的作用
Android官方的分页加载组件,可以RecyclerView上实现在数据分页加载,无限滚动的效果。官方例子:https://github.com/googlesamples/android-architecture-components/tree/master/PagingWithNetworkSample
需要添加的依赖
implementation "com.android.support:appcompat-v7:28.0.0"
implementation "com.android.support:recyclerview-v7:28.0.0"
implementation "com.android.support:swiperefreshlayout:28.0.0"
implementation "android.arch.paging:runtime:1.0.1"
implementation "android.arch.lifecycle:extensions:1.1.1"
//使用Androidx的依赖
//implementation "androidx.appcompat:appcompat:1.0.2"
//implementation "androidx.recyclerview:recyclerview:1.0.0"
//implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
//implementation "androidx.paging:paging-runtime:2.0.0"
//implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
主要用到这几个类
PagedListAdapter:RecyclerView使用的适配器
DataSource:数据源,常用的子类ItemKeyedDataSource、PageKeyedDataSource
LivePagedListBuilder:实现对象需要传入数据源工厂和请求的页面长度
ItemKeyedDataSource
一般使用id或位置标识加载数据
class DataSourceByItem: ItemKeyedDataSource<Int, DataBean>() {
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<DataBean>) {
//初始化加载数据
params.requestedInitialKey//初始化key
params.requestedLoadSize//请求数据的长度
callback.onResult(ArrayList<DataBean>())//回调结果
}
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<DataBean>) {
//获取下一页的数据
params.key//通过getKey()获取RecyclerView最后一个key
params.requestedLoadSize//请求数据的长度
callback.onResult(ArrayList<DataBean>())//回调结果
}
override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<DataBean>) {
//获取上一页的数据
params.key//通过getKey()获取RecyclerView第一个key
params.requestedLoadSize//请求数据的长度
callback.onResult(ArrayList<DataBean>())//回调结果
}
override fun getKey(item: DataBean): Int {
//获取id(位置标识)
return item.id
}
}
PageKeyedDataSource
一般使用页码加载
class DataSourceByPage : PageKeyedDataSource<Int, DataBean>() {
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, DataBean>) {
//初始化加载数据
params.requestedLoadSize//请求数据的长度
callback.onResult(ArrayList<DataBean>(),/*上一页的页码*/0,/*下一页的页面*/2)//回调结果
}
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, DataBean>) {
//获取下一页的数据
params.key//需要请求页面的页码
params.requestedLoadSize