Android 分页库如何知道加载更多数据?

我对开发Android应用程序相当陌生,我正在尝试以“正确的方式”做所有事情。所以现在,我正在将新的Android分页库实现到我的项目中,我需要从网络服务器加载文章列表。

我有一个类,它返回一个类,其中包含我想在回收器视图中显示的实例。文章列表已在服务器上分页,因此存储库发送对第一页的请求,并在请求的页面上返回属性设置为 和包含 文章的属性的属性。我不知道一页上可以有多少篇文章。ArticlesRepositoryArticleListArticleListItemArticleListpage1articlesList<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));
    }
}

/ 函数返回 带有上一页/下一页码的 a,如果没有页码,则返回 。previousnextIntegernull

在我的ViewModel中,我像这样配置PagedList:

PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setInitialLoadSizeHint(1)
            .setPageSize(1)
            .setPrefetchDistance(1)
            .build();

通过这种方式,我能够加载第一页,但是当我滚动到RecyclizerView的底部(位于NestedScrollView中)时,没有任何反应。调试显示未调用该方法。PageKeyedDataSource.loadAfter

我是否必须以某种方式告诉PagedList必须加载下一页,或者它是RecyclizerView/DataSource/GodKnowsWhatElse的工作,而我只是做错了什么?感谢您的任何建议。


答案 1

分页库应自动知道何时加载新项目。实现中的问题是分页的RecyclerView位于NestedScrollView中,并且根据此问题,该库没有内置对此的支持。

当您将 recyclerview 放在无限滚动父级中时,它将布局其所有子级,因为父级提供无限维度。

您需要创建自己的嵌套滚动视图实现,实际上,此要点中有一个可能可以帮助您。

还建议将 fillViewPort 添加到此自定义嵌套滚动视图中:

android:fillViewport=“true” 到可滚动容器


答案 2

推荐