当前位置:  开发笔记 > 编程语言 > 正文

Android Paging Library如何知道加载更多数据?

如何解决《AndroidPagingLibrary如何知道加载更多数据?》经验,为你挑选了1个好方法。

我是开发Android应用程序的新手,我正在尝试以"正确的方式"做所有事情.所以现在,我正在将新的Android Paging Library实现到我的项目中,我需要从网络服务器加载文章列表.

我有一个ArticlesRepository类,它返回一个ArticleList包含ArticleListItem我想在RecyclerView中显示的实例的类.文章列表已经分页的服务器上,这样仓库发送对第一页的请求,并返回一个ArticleListpage属性设置为1articles包含属性List的请求页面上的文章.我不知道一页上有多少篇文章.

现在,我能够实现一个PageKeyedDataSource,但它只获取第一页:

@Override
public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {
    ArticleList list = load(1);
    if (list != null) {
        callback.onResult(list.articles, null, next(list));
    }
}

@Override
public void loadBefore(@NonNull LoadParams params, @NonNull LoadCallback callback) {
    ArticleList list = load(previous(params.key));
    if (list != null) {
        callback.onResult(list.articles, previous(list));
    }
}

@Override
public void loadAfter(@NonNull LoadParams params, @NonNull LoadCallback callback) {
    ArticleList list = load(next(params.key));
    if (list != null) {
        callback.onResult(list.articles, next(list));
    }
}

previous/ next函数返回一个Integer与一个/下一个页码或null是否有isn't之一.

在我的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的工作,我只是做错了什么?谢谢你的建议.



1> Levi Moreira..:

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

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

您需要创建自己的Nested Scroll View实现,此要旨中实际上有一个可以帮助您的实现。

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

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有