java - 使用在 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 收件箱消息。
解决方案
PagingSource.load
PagingConfig.prefetchDistance
会根据项目绑定到自动触发RecyclerView
。这意味着即使您不滚动,Paging 也会尝试根据可见视口完成项目。
prev/nextKey
无论您使用什么语言,终止加载的行为都是相同的,但它基于null
for LoadResult.Page
inPagingSource
和endOfPaginationReached
in RemoteMediator
。
如果您认为这是图书馆的问题,我鼓励您在此处提交问题:https ://issuetracker.google.com/issues/new?component=413106&template= 1096385 并附上重现,我很乐意看看!
否则,如果您可以附上您的PagingSource
实施,那将有所帮助,因为到目前为止您发布的内容没有太多信息可以继续。
推荐阅读
- javascript - Javascript,将数组的第一个元素连接到另一个数组的第一个元素
- python - 在 Python 中将列移动到 DataFrame 的前面
- angular - Angular 8 - 带有属性或变量的表单输入集验证规则
- javascript - 在完整日历中的第一个日期未显示重复事件
- html - 表格中的 TH 是否允许使用标题?
- c - 使用带有联合的类型双关语的问题
- python - 如何使用 PyTorch 并行化 CNN 对图像的评估
- r - 将视觉元素(图标)添加到 ggpplot 标签
- ckeditor - ckeditor 自动在视觉上调整拖放图像的大小
- java - Azure Active Directory 的 Spring Security Oauth2