问题标签 [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 投票
3 回答
860 浏览

android - 如何对从 Paging 3 返回 PagingSource 的 Room Dao 查询进行单元测试

我的问题实际上很笼统。我想知道如何对从Paging 3返回PagingSource的Room Dao查询进行单元测试。

我有一个Room Dao查询:

我想知道如何对这个查询进行单元测试。

到目前为止我尝试过的(使用内存中的Room数据库进行测试):

然而,这并没有通过:

junit.framework.AssertionFailedError:预期:androidx.paging.PagingData@7d6c23a1 实际:androidx.paging.PagingData@321123d2

不知道如何正确处理。任何帮助将不胜感激!

0 投票
2 回答
4991 浏览

android - Android Paging 3 如何过滤、排序和搜索我的数据

我正在尝试实现我正在使用 Room 的分页,我花了很长时间才意识到这一切都为我完成了,但我需要做的是能够过滤搜索并对我的数据进行排序。我想暂时将其保留为 LiveData,以便稍后交换。我有这种过滤搜索和排序的方法,效果很好,

这里有几个switchmaps,第一个是响应搜索更新

第二个是响应过滤器更新

第三个是观察搜索到的列表更新,然后调用filterTypes和maybeSortList这两个过滤和排序的小方法

如前所述,我想将这些迁移到分页 3 并且很难做到这一点我已经更改了我的存储库和 dao 以返回 PagingSource,我只想更改我的视图模型以将 PagingData 作为实时数据返回,到目前为止我有这个

但是 switchmap 给了我一个错误

我想我理解但不知道如何解决它,过滤器和排序方法也不再起作用,我看不到任何用 PageData 替换它的好方法,它有一个过滤器但没有排序?任何帮助表示赞赏:LiveData<Y!

更新感谢@Shadow,我已经重写它以使用中介实时数据实现搜索,但我仍然坚持过滤

0 投票
0 回答
263 浏览

android - 再次观察到片段中的 LiveData 后,分页 3 返回最后一个值

在我的情况下,我获取了一个数据列表并在RecyclerView使用中显示它,PagingDataAdapter但是在导航到另一个Fragment然后导航回上一个Fragment(A - > B - > A)之后出现了问题,所以在再次重新观察到之后LiveData,我得到了来自分页源的最新值,我没有得到所有列表数据。

这是我写的代码:

OrdersFragmentViewModel.kt

分段

分页数据源

0 投票
1 回答
821 浏览

android - 如何以不会导致其数据重排的方式缓存 PagingData

我有两个片段的简单设置:ConversationFragmentDetailsFragment

我正在使用RoomPaging 3 library填充ConversationFragment我正在使用的PagingLiveData实现以及AndroidViewModel属于ConversationFragment.

我没有使用Navigation Components这里,只是根据 Android 文档的常见片段导航。

从那个片段我可以打开DetailsFragment然后再次返回片段。一切都运行良好,直到我打开所述片段并返回,然后绑定在 中的观察者ConversationFragment丢失,因为在打开DetailsFragment.

到目前为止,这不是一个大问题,我可以再次重新启动观察者,并且当我这样做时它确实有效。但是,当我再次附加观察者时,整个列表重排,这会导致列表中的项目RecyclerView变得疯狂,列表所在的位置丢失并且滚动条改变大小,确认页面正在加载/重新加载。

我可以在一定程度上承受这种奇怪的行为,但在此之上失去位置是不可接受的。

我研究了在视图模型中缓存结果,但我可以在可用文档中找到的示例是基本的,并没有显示如何使用LiveData<PagingData<...>对象实现相同的目标。

目前这就是我所拥有的:

ConversationFragment

ConversationViewModel

事实上,即使我返回PagingLiveData.cachedIn片段时的行为结果也是一样的;这些项目在 recyclerview 列表中显示出不稳定的行为,并且它所在的位置完全丢失了。

这是我试图实现的,看看它是否解决了我的问题: 在此处输入图像描述

这是此处提供的代码实验室:https ://developer.android.com/codelabs/android-training-livedata-viewmodel#8

正如您所看到的mAllWords,它们被缓存并且它们仅在第一次构造视图模型时才被初始化,任何后续更改都只是更新,并且只需要在片段被销毁并再次创建时附加新的观察者而仍在回栈。

这就是我想要做的,但它并没有像我想象的那样工作,至少它不像我想象的那么简单。

如何做到这一点?

0 投票
4 回答
1185 浏览

android - Android:LoadStateAdapter 不在 recyclerview 网格布局中居中

我当前的问题是,LoadStateAdapter显示加载和错误状态的 my 不在 my 内部recyclerview,它有一个 gridlayout 作为布局管理器。我在官方的 android 开发者网站上没有找到任何关于此的信息,所以我在这里问:如何将我LoadStateAdapter的 Recyclerview 居中?

当前的

在此处输入图像描述

分段

适配器

布局.xml

0 投票
0 回答
618 浏览

android - 如何在同一个 ConcatAdapter 中使用具有多种视图类型的不同适配器?

我有一个ConcatAdapter使用一个(通过调用和一个 normalPagingDataAdapter由它自己包装):ConcatAdapterwithLoadStateFooterListAdapter

thenewChatMessageAdapter和 thechatMessageHistoryAdapter都具有多种视图类型,但两个适配器具有完全相同的视图类型:

itemViewType当我启动我的应用程序时,所有视图都是空的,因为onBindViewHolder. 如果我删除withLoadStateFooter(将第二个 ConcatAdapter 变成我自己的PagingDataAdapter)并添加它,它可能会起作用ConcatAdapter.Config.Builder().setIsolateViewTypes(false).build(),可能是因为两个适配器具有完全相同的viewTypes. 但是,一旦我添加withLoadStateFooter它也停止工作,我又回到了空视图持有者。

所以简而言之,我的问题是:如何viewTypes在我的适配器中使用不同的组合在 a 中ConcatAdapter

0 投票
2 回答
248 浏览

android-paging - Jetpack Paging3 RemoteMediator 在#load append 上返回相同的 PagingSatate

我正在按照这个codelab构建一个带有 github API 和本地数据库的 paging3 应用程序。虽然前 2 个页面加载正常,但当滚动到底部时尝试加载第 3 个页面时,中介会遇到循环 - 相同的 PagingState 一遍又一遍地传递给 load() 函数。

只是想知道是否有人知道这里可能的根本原因是什么?

一些实现细节:

RemoteMediator:(prevPage 和 currentPage 来自 github API 的分页响应头并保存到本地 DB。)

可观察的:我正在使用liveData而不是flow来自Pager

:只是一个简单的查询

0 投票
0 回答
218 浏览

android - Android:Paging3 使用 cloud-firestore 创建远程中介

我正在尝试使用 Paging3 创建一个 RemoteMediator,我在其中缓存本地结果以节省网络流量、云火存储文档访问并计算每个查询的项目数量以显示占位符。

我已经通过实现访问我的 cloud-firestore 并加载下一页的分页源成功地实现了“唯一的网络方式”。但我正在努力使用 RemoteMediator 方式,因为如何结合 cloud-firestore 做到这一点的教程为零。

我将提供我当前的方法(pagingSource 方式)以及我的 RemoteMediator 走了多远。我很感激任何帮助。

存储库

当前方法(工作)

RemoteMediator 方法(没有线索)

0 投票
1 回答
199 浏览

android - 如果使用 Paging 3 库,onRestoreInstanceState 不适用于 RecyclerView 布局管理器

我在保存 RecyclerView 状态时遇到问题,它通过保存布局管理器状态并在恢复片段后使用它来解决。(感谢@HarisDautović)

但如果使用分页 3 库它不起作用。只是导入这个库会导致问题,即使不在应用程序中使用它。

请查看此问题并接受答案的评论以获取更多详细信息: RecyclerView with StaggeredGridLayoutManager in ViewPager, 在返回片段时自动排列项目

0 投票
1 回答
969 浏览

android - Android Paging 3 库:如何使用新参数更改列表?

我有一个显示搜索项目列表的搜索片段。如果用户输入某些内容,我将该字符串作为新的查询参数传递给 url,并使用 paging 3 库获取新列表。

第一个解决方案是:

通过此解决方案,通过更改 url ( showPostList(newUrl),列表保持不变。可能在 viewModel 中使用缓存列表。

另一种解决方案是:使用片段showPostList(initUrl)的in onViewCreated,然后通过更改参数使用自爆方法:

这项工作,但如果旧列表和新列表有共同的项目,新的列表显示在最后一个共同的可见项目。例如,如果旧列表的第 5 位项目与新列表的第 7 位相同,则在列表更改以显示新列表后,它从第 7 位而不是第一项开始。

我在这里找到了另一个解决方案:

但是通过使用此列表刷新返回片段,有时Recyclerview状态更改。