Jetpack插件化学习之AndroidX Paging 大数据列表加载库二–使用
上一篇主要介绍了Paging加载库的主要组件,以及组件之间的工作方式,不是很清楚的可以移步上一篇
Jetpack插件化学习之AndroidX Paging 大数据列表加载库一
本篇主要介绍Paging库如何在项目中使用。
开篇之前,本文的数据来源以及demo代码的书写参考了这位大佬的文章。
使用Paging Library获取网络数据
本篇也是直接加载的网络数据。
首先在项目中添加Paging库依赖
// androidx paging
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.0.0"
implementation "androidx.paging:paging-runtime:2.1.0-alpha01"
依赖中看到有AndoridX的依赖。关于AndoridX的介绍以及Android到AndroidX的升级
接下来按照Paging的组件,依次创建
- DataSource
- PagedList&LivePagedListProvider
DataSource
初始化一个PositionalDataSource对象并实现相关方法。loadInitial、loadRange。
public class PagingItemDataViewModel extends AndroidViewModel {
public static final int CONTENT_LENGTH = 20;
public static final int FIRST_PAGE = 1;
private int mPage = FIRST_PAGE;
// final List<GankData> resultBeans = new ArrayList<>();
private LiveData<PagedList<GankData>> mLiveData;
public PagingItemDataViewModel(@NonNull Application application) {
super(application);
}
public LiveData<PagedList<GankData>> getmLiveData() {
initPageList();
return mLiveData;
}
private void initPageList() {
final PositionalDataSource<GankData> positionalDataSource = new PositionalDataSource<GankData>() {
private int computeCount() {
//这里的实际计数代码
return CONTENT_LENGTH;
}
/**
* 网络请求耗时操作
* @param onHttpRequestListener 网络请求成功的回调
* @param page 加载到第几页
*/
private void loadRangeInternal(final OnHttpRequestListener onHttpRequestListener, int page) {
//这里的实际加载代码
ManageHttp.getWelfare1(new BaseOnResponseCallBack<List<GankData>>(List.class) {
@Override
public void onNext(List data, int IDUrl, boolean isCache) {
onHttpRequestListener.onNext(data, IDUrl, isCache);
}
@Override
public void onStart(int IDUrl, boolean isCache) {
}
@Overri