当前位置: 首页 > 面试题库 >

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

濮金鑫
2023-03-14
问题内容

我对开发Android应用程序还很陌生,我正在尝试以“正确的方式”做所有事情。因此,现在,我将新的Android Paging
Library实现到我的项目中,在这里我需要从网络服务器加载文章列表。

我有一个ArticlesRepository类,它返回一个ArticleList类,该类包含ArticleListItem要在RecyclerView中显示的实例。文章列表已经在服务器上进行了分页,因此存储库发送对第一页的请求,并在所请求的页面上返回ArticleList,其page属性设置为,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与一个/下一个页码或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的工作,我只是做错了什么?感谢您的任何建议。


问题答案:

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

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

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

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

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



 类似资料:
  • 我在应用程序中使用了毕加索,但我面临一个问题。我在Listview中显示用户配置文件图像,如果图像不存在,我想在ImageView中显示用户名的首字母缩写。我可以显示个人资料图像,如果存在,但为了显示首字母,我如何知道用户没有图像。?

  • 我试着阅读关于JS和React的书籍和观看视频,但我仍然没有更好地理解React道具

  • 问题内容: 二者并具有可用于当网页被完全加载到检测信号。问题是网页上有一些异步加载的内容(ajax)。在这种情况下如何知道页面何时完全加载? 问题答案: 我实际上尚未做到这一点,但我认为您 可以 使用来实现您的解决方案。 您可以使用networkAccessManager ()函数从QWebPage获取QNetworkAccessManager 。QNetworkAccessManager的信号完

  • 问题内容: 我有一个页面,一个页面包含一个AJAX组件,当用户单击一个按钮时,其内容会更改。我如何知道内容何时加载到? 问题答案: 您需要做两件事: 在您的JavaScript代码中,发出带有自定义URL的AJAX请求已完成的信号: 在您的本机代码中,您需要实现一个侦听此自定义URL 的委托: 不能保证此代码可以解析/编译,但应为您提供实现方法的思路。

  • Loadmore用于实现加载更多的效果,使用比较简单,加上相关的 class 就可以实现这种效果,示例代码如下: <template> <div class="page"> <div class="weui-loadmore"> <div class="weui-loading"></div> <div class="weui-loadmore__tips">正

  • loadMore 加载更多 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过status设置组件的状态,加载前值为loadmore,加载中为loading,没有数据为nomore 注意:以下示例仅为模拟效果,实际中请根据自己的逻辑,修改代码的实现 <template> <view class="wrap">