Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android分页库如何知道加载更多数据?_Java_Android_Android Recyclerview_Android Viewmodel_Android Paging - Fatal编程技术网

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

Java Android分页库如何知道加载更多数据?,java,android,android-recyclerview,android-viewmodel,android-paging,Java,Android,Android Recyclerview,Android Viewmodel,Android Paging,我对开发Android应用程序相当陌生,我正试图以“正确的方式”做每件事。因此,现在,我正在将新的Android分页库实现到我的项目中,我需要从网络服务器加载一个文章列表 我有一个ArticlesRepository类,它返回一个articleslist类,该类包含我希望在RecyclerView中显示的articlesListItem的实例。文章列表已在服务器上分页,因此存储库发送对第一页的请求,并返回文章列表,其中页面属性设置为1,而文章属性包含请求页面上文章的列表。我不知道一页可以写多少篇

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

我有一个
ArticlesRepository
类,它返回一个
articleslist
类,该类包含我希望在RecyclerView中显示的
articlesListItem
的实例。文章列表已在服务器上分页,因此存储库发送对第一页的请求,并返回
文章列表
,其中
页面
属性设置为
1
,而
文章
属性包含请求页面上文章的
列表
。我不知道一页可以写多少篇文章

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

@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));
    }
}
通过这种方式,我可以加载第一个页面,但当我滚动到RecyclerView的底部(在NestedScrollView中)时,什么也没有发生。调试显示未调用
PageKeyedDataSource.loadAfter
方法


我是否必须告诉页面列表必须加载下一页,或者是因为RecyclerView/DataSource/GodKnowsWhatElse的工作,而我只是做错了什么?感谢您的建议。

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

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

您需要创建自己的嵌套滚动视图实现,实际上这里有一个可以帮助您

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

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


谢谢,这才是真正的原因。我没有实现自己的嵌套滚动视图,而是将其全部删除,并将滚动视图中的其他视图放在回收器视图中,解决了此问题并提高了性能。是的,在滚动视图中有类似iOS TableView的解决方案会很好,其中有父scrollview的滚动,然后独立滚动内部tableview。每天我都会问为什么我是一个安卓开发者,然后改变主意,谢谢,这很有效!但是假设我在这个SmartNestedScrollView中有一个视图和一个recycler视图,只有recycler视图是可滚动的。我该如何解决这个问题?谢谢,很高兴知道是什么导致分页库从服务器加载所有页面。我在回答中给出了一个新的很好的解决方案:TLDR;您必须使用最近添加到Recyclerview的“MergeAdapter”
PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setInitialLoadSizeHint(1)
            .setPageSize(1)
            .setPrefetchDistance(1)
            .build();