首页 > 解决方案 > 使用在 Java(不是 Kotlin)中工作的 RxJava 获取 Android Paging 3.0

问题描述

按照 Paging 3文档,我设法让 Paging library 3.0.0-alpha02 在 Kotlin 应用程序中与 RxJava2 一起工作。

但是,当我将分页代码移植到 Java 应用程序时遇到了问题,因为数据是按页面检索的,但是即使我不滚动回收站视图,页面检索也会在后台继续进行。换句话说,在加载第 1 页之后,它会加载第 2、3、4 等页面,并继续运行。

我正在视图模型中设置分页:

public Observable<PagingData<Item>> loadItems()
{

  PagingConfig config = new PagingConfig(...);

  Pager<Integer, Message> pager = new Pager<Integer, Item>(config, null, null,
                                        () -> new MyPagingSource());

  return PagingRx.getObservable(pager) 
}

然后订阅活动/片段:

        disposable = viewModel.loadItems()
            .subscribe( pagingData -> {
            getAdapter().submitData(getLifecycle(), pagingData);
        });

在 Java 应用程序中,我订阅的是片段而不是活动,但除此之外代码与 Kotlin 应用程序相同。

我意识到分页库 3 在内部使用协程和流程,所以我添加了这个依赖项,但它没有任何区别。

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-rx2:1.3.7'

编辑:

Kotlin 演示应用程序位于GitHub 上,具有 RxJava 和 Flow 版本(基于 Android 示例)。它确实在电话内容提供商上寻呼以获取 SMS 收件箱消息。

标签: javaandroidkotlinrx-java2paging

解决方案


PagingSource.loadPagingConfig.prefetchDistance会根据项目绑定到自动触发RecyclerView。这意味着即使您不滚动,Paging 也会尝试根据可见视口完成项目。

prev/nextKey无论您使用什么语言,终止加载的行为都是相同的,但它基于nullfor LoadResult.PageinPagingSourceendOfPaginationReachedin RemoteMediator

如果您认为这是图书馆的问题,我鼓励您在此处提交问题:https ://issuetracker.google.com/issues/new?component=413106&template= 1096385 并附上重现,我很乐意看看!

否则,如果您可以附上您的PagingSource实施,那将有所帮助,因为到目前为止您发布的内容没有太多信息可以继续。


推荐阅读