问题标签 [android-paging-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1420 浏览

android - 如何使用 Android androidx.paging.PagingDataAdapter loadStateFlow 来显示 Empty、Loading 和 Loaded UI 状态

我当前的 android 应用程序使用 Room Paging3 库

我的要求是显示“数据加载微调器”、没有数据可用时的空消息或加载的数据。

我可以在加载时成功显示加载微调器或数据,但是当没有数据显示时它不起作用。

我已经尝试过 SO 上提供的解决方案,但是没有一个能解决我的问题

成功处理加载和加载数据的代码版本类似于:-

我也尝试使用这个投票给 SO 答案来显示空状态,但是它对我不起作用

该问题是由发出此条件的 loadStateFlow 引起的

在加载数据时。

我的列表屏幕已拉刷新,在数据刷新过程中,我首先删除所有现有行,然后远程获取所有数据。

无论如何我可以PagingDataAdapter.loadStateFlow用来显示我的三种状态加载,加载或空?

我的ViewModel代码类似于:-

我的Repository代码类似于:-

我的房间查询类似于这个

我哪里出错了?

是否有可能实现我想要的功能?

更新

我相信我有两个不同的问题。

第一个是由我的初始数据同步引起的,我使用 Android Workers 从远程源下载数据并插入到我的本地 Room 数据库中。由于远程数据的组织方式和可用的 Restful API,列表中显示的数据可以由多个工作人员插入。本地插入的数据的这种“分区”导致提交给我的 Paging3 适配器的数据是零星的,这意味着加载状态循环通过加载 -> 未加载 -> 加载 -> 未加载。

我在同步进行时显示列表片段,这导致加载 Spinner 和显示的数据列表之间的屏幕内容“闪烁”

0 投票
3 回答
679 浏览

android - 将 recyclerview 选择与分页 3 一起使用

我正在尝试将选择(https://developer.android.com/reference/androidx/recyclerview/selection/package-summary)与新的分页库(所以分页3)一起使用

使用 Paging 2 是可行的,因为我们使用的是 PagedListAdapter 并且可以与 Selection 库一起使用,但现在使用新的 PagingDataAdapter 我不能让它工作了。

https://developer.android.com/reference/kotlin/androidx/paging/PagingDataAdapter

我们正在丢失 getCurrentList(),setHasStableIds() 现在将返回 UnsupportedOperationException。

因此,如果有人戴上它,我将不胜感激。

0 投票
2 回答
1161 浏览

android - 使用远程调解器和分页源对具有分页 3 的存储库进行单元测试

我正在尝试对 android 中的存储库类进行单元测试,该存储库类使用远程调解器和分页源进行分页。

但是当我运行测试时,返回的结果是空的,虽然实际应该包含测试项。

如下所示:

这是我的存储库

这是我的UT

这里是 FakeApi、FakePagingSource 和 FakeDao

0 投票
2 回答
3742 浏览

android - Android Paging 3 - 滚动和加载新页面时出现闪烁、故障或位置跳跃

大家好,我正在使用 Android Jetpack Paging 库 3,我正在创建一个实现网络 + 数据库场景的新闻应用程序,并且我按照谷歌https://codelabs.developers.google.com/codelabs/android-paging的代码实验室,我几乎就像在代码实验室中一样,我几乎匹配了示例https://github.com/android/architecture-components-samples/tree/main/PagingWithNetworkSample中显示的所有操作。

它几乎可以正常工作...但是我的后端响应是页面键控的,我的意思是响应带有新闻列表和下一页 url,远程调解器获取数据,填充数据库,设置存储库,设置视图模型。 ..

问题是:当recyclerview加载数据时,会发生以下情况:recyclerview闪烁,项目跳转,被删除,再次添加等等。我不知道为什么 recyclerview 或其 itemanimator 会这样,看起来如此丑陋和故障。更重要的是,当我滚动到列表的末尾时,会获取新的项目,并且再次发生故障和跳跃效果。

如果你能帮助我,我将非常感激,我坐了三天,非常感谢你提前。这是我的代码片段:

这是DAO

新闻数据库Kt

远程调解器

分页存储库

博客Viewmodel

政治片段Kotlin

博客适配器

我的视图持有者

NewsApi接口

}

我尝试设置 initialLoadSize = 1 但问题仍然存在

编辑:感谢您的回答@dlam,是的,确实如此,我的网络 API 返回按 id 排序的结果列表。顺便说一句,当应用程序脱机运行时,项目也会跳转。

在线刷新和加载视频

在线加载和分页

在线加载和分页(2)

刷新和离线加载时的视频

离线加载和刷新

再次感谢,这是我的要点链接https://gist.github.com/Aydogdyshka/7ca3eb654adb91477a42128de2f06ea9

编辑 非常感谢@dlam,当我设置pageSize = 10时,跳跃消失了......然后我记得为什么我首先设置pageSize = 1......当我刷新时,加载了3 x pageSize的项目,甚至如果我覆盖了 initialLoadSize = 10 ,它仍然会在刷新后加载 3 x pageSize 调用 append 2x ,我可能做错了什么,当我刷新时只加载第一页的正确方法是什么?

0 投票
4 回答
1215 浏览

android - 使用 RxJava 时在分页 3 库中刷新

当使用expenseAdapter.refresh() 刷新适配器 时,当Pager 期望创建一个新实例时,重新使用了一个PagingSource 实例。确保传递给 Pager 的 pagingSourceFactory 总是返回一个新的 PagingSource 实例。 这是我用来获取数据的可流动对象。

任何帮助将不胜感激。

0 投票
1 回答
97 浏览

android - 在Paging3中,删除item后,recyclerview如何恢复到原来的位置?

我模仿了codelab,实现了getRefreshKey()方法,但是由于params.loadSize3*PAGE_SIZE在刷新之后(也就是删除一个item或者编辑一个item),所以我的recyclerview大概率不会回到原来的位置。我应该怎么办?这是我的寻呼源:

0 投票
1 回答
513 浏览

android - Android Paging 3:LoadType.APPEND 返回空远程键

我一直在尝试解决如何解决RemoteMediator's 的问题APPEND LoadType

在空的 Room DB 上,LoadType流程如下: REFRESH -> PREPEND -> APPEND (remoteKeys = null, endOfPaginationReached = true)

实体和远程键表至少有 10 行,LoadType流程如下: REFRESH -> PREPEND -> APPEND (remoteKeys = prev=null, next=2, endOfPaginationReached = false)

显然,我的问题是在新安装的设备上(房间数据库为空),用户不会看到超过 10 个项目,因为APPEND'sstate.lastItemOrNull()正在返回null

到目前为止,这是我的代码:

对于我的load()功能:

APPEND这是一个示例 logcat 显示null 在此处输入图像描述

让我的应用程序至少无法向下滚动一次!

编辑:这是我保存远程密钥的方法: 在此处输入图像描述

0 投票
0 回答
37 浏览

android - 分页3调用adapter.refresh首先调用第2页

我正在使用分页 3 3.0.0-beta02。当我将它与滑动刷新布局一起使用时,我注意到它调用第 2 页然后第 1 页,由于此问题,第 2 页在第 1 页和第 3 页之后首先加载,并且适配器滚动到第 2 页开始的中间位置。

我最初注意到同样的事情,当我转到片段时它会加载 2 页。

另一件事刷新第二次或更进一步它工作正常,但它仍然加载 2 页。最初是第 1 页,然后是第 2 页

这是我的分页配置

寻呼源

我找到了一些hacky修复,但我想知道真正的解决方案

0 投票
0 回答
125 浏览

android-paging-3 - onItemRangeInserted 不适用于使用 insertSeparators

我希望 recyclerView 在插入新项目时滚动到顶部,它适用于上面的代码。然后我使用下一个代码将分隔符添加到 recyclerVeiw, binding.rv.layoutManager?.scrollToPosition(0)不再起作用。

日志 :

似乎binding.rv.layoutManager?.scrollToPosition(0)在 insertSeparators 之前执行得太早了。

0 投票
1 回答
353 浏览

android-paging-3 - Paging3 - 如何在聊天应用程序中进行反向分页

我最近迁移到 Paging3。但是,我注意到大多数教程和指南主要是正常分页(从上到下)

当用户滚动到顶部边界时,我需要实现反向分页,将加载页面 2、3、4 .. 是否有任何教程/指南?

PS:现在初始加载工作正常,但是当我滚动到最顶部时,我不知道如何加载第 2 页数据。

我目前的做法

寻呼源

存储库

视图模型

分段