我对开发 Android 应用程序相当陌生,我正在尝试“以正确的方式”做所有事情。所以现在,我正在将新的 Android 分页库实现到我的项目中,我需要从网络服务器加载文章列表。
我有一个ArticlesRepository
类,它返回一个包含我想在 RecyclerView 中显示的ArticleList
实例的类。ArticleListItem
文章列表已经在服务器上进行了分页,因此存储库发送一个对第一页的请求,并返回一个属性设置为和属性包含所请求页面上的文章ArticleList
的属性。我不知道一页能写多少篇文章。page
1
articles
List<ArticleListItem>
现在,我能够实现 a 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
带有上一页/下一页页码的或如果null
没有。
在我的 ViewModel 中,我像这样配置 PagedList:
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(1)
.setPageSize(1)
.setPrefetchDistance(1)
.build();
这样我就可以加载第一页,但是当我滚动到 RecyclerView 的底部(即在 NestedScrollView 内)时,什么也没有发生。调试显示该PageKeyedDataSource.loadAfter
方法没有被调用。
我是否必须以某种方式告诉 PagedList 必须加载下一页,还是 RecyclerView/DataSource/GodKnowsWhatElse 的工作而我只是做错了什么?感谢您的任何建议。