我对开发Android应用程序还很陌生,我想以“正确的方式”做所有事情。所以,现在,我将新的Android Paging Library实施到我的项目中,在这里我需要从网络服务器加载一系列文章
我有一个ArticlesRepository
类,它返回一个ArticleList
类,其中包含要在RecyclerView中显示的ArticleListItem
的实例。文章列表已在服务器上分页,因此存储库发送对第一页的请求,并返回ArticleList
属性page
设置为1
且{{1} }属性,其中包含articles
个在所请求页面上的文章。我不知道一页上可以有多少篇文章。
现在,我能够实现List<ArticleListItem>
,但是它只能获取第一页:
PageKeyedDataSource<Integer, ArticleListItem>
@Override
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull LoadInitialCallback<Integer, ArticleListItem> callback) {
ArticleList list = load(1);
if (list != null) {
callback.onResult(list.articles, null, next(list));
}
}
@Override
public void loadBefore(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, ArticleListItem> callback) {
ArticleList list = load(previous(params.key));
if (list != null) {
callback.onResult(list.articles, previous(list));
}
}
@Override
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, ArticleListItem> callback) {
ArticleList list = load(next(params.key));
if (list != null) {
callback.onResult(list.articles, next(list));
}
}
/ previous
函数返回具有上一页/下一页页码的next
,如果没有则返回Integer
。
在ViewModel中,我像这样配置PagedList:
null
通过这种方式,我可以加载第一页,但是当我滚动到RecyclerView的底部(位于NestedScrollView内部)时,什么也没发生。调试显示未调用PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(1)
.setPageSize(1)
.setPrefetchDistance(1)
.build();
方法。
我是否必须以某种方式告诉PagedList必须加载下一页,还是RecyclerView / DataSource / GodKnowsWhatElse的工作,我只是做错了什么?感谢您的任何建议。