问题标签 [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.
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
不知道如何正确处理。任何帮助将不胜感激!
android - Android Paging 3 如何过滤、排序和搜索我的数据
我正在尝试实现我正在使用 Room 的分页,我花了很长时间才意识到这一切都为我完成了,但我需要做的是能够过滤搜索并对我的数据进行排序。我想暂时将其保留为 LiveData,以便稍后交换。我有这种过滤搜索和排序的方法,效果很好,
这里有几个switchmaps,第一个是响应搜索更新
第二个是响应过滤器更新
第三个是观察搜索到的列表更新,然后调用filterTypes和maybeSortList这两个过滤和排序的小方法
如前所述,我想将这些迁移到分页 3 并且很难做到这一点我已经更改了我的存储库和 dao 以返回 PagingSource,我只想更改我的视图模型以将 PagingData 作为实时数据返回,到目前为止我有这个
但是 switchmap 给了我一个错误
我想我理解但不知道如何解决它,过滤器和排序方法也不再起作用,我看不到任何用 PageData 替换它的好方法,它有一个过滤器但没有排序?任何帮助表示赞赏:LiveData<Y!
更新感谢@Shadow,我已经重写它以使用中介实时数据实现搜索,但我仍然坚持过滤
android - 再次观察到片段中的 LiveData 后,分页 3 返回最后一个值
在我的情况下,我获取了一个数据列表并在RecyclerView
使用中显示它,PagingDataAdapter
但是在导航到另一个Fragment
然后导航回上一个Fragment
(A - > B - > A)之后出现了问题,所以在再次重新观察到之后LiveData
,我得到了来自分页源的最新值,我没有得到所有列表数据。
这是我写的代码:
OrdersFragmentViewModel.kt
分段
分页数据源
android - 如何以不会导致其数据重排的方式缓存 PagingData
我有两个片段的简单设置:ConversationFragment
和DetailsFragment
我正在使用Room
并Paging 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
,它们被缓存并且它们仅在第一次构造视图模型时才被初始化,任何后续更改都只是更新,并且只需要在片段被销毁并再次创建时附加新的观察者而仍在回栈。
这就是我想要做的,但它并没有像我想象的那样工作,至少它不像我想象的那么简单。
如何做到这一点?
android - 如何在同一个 ConcatAdapter 中使用具有多种视图类型的不同适配器?
我有一个ConcatAdapter
使用一个(通过调用和一个 normalPagingDataAdapter
由它自己包装):ConcatAdapter
withLoadStateFooter
ListAdapter
thenewChatMessageAdapter
和 thechatMessageHistoryAdapter
都具有多种视图类型,但两个适配器具有完全相同的视图类型:
itemViewType
当我启动我的应用程序时,所有视图都是空的,因为onBindViewHolder
. 如果我删除withLoadStateFooter
(将第二个 ConcatAdapter 变成我自己的PagingDataAdapter
)并添加它,它可能会起作用ConcatAdapter.Config.Builder().setIsolateViewTypes(false).build()
,可能是因为两个适配器具有完全相同的viewTypes
. 但是,一旦我添加withLoadStateFooter
它也停止工作,我又回到了空视图持有者。
所以简而言之,我的问题是:如何viewTypes
在我的适配器中使用不同的组合在 a 中ConcatAdapter
?
android - Android:Paging3 使用 cloud-firestore 创建远程中介
我正在尝试使用 Paging3 创建一个 RemoteMediator,我在其中缓存本地结果以节省网络流量、云火存储文档访问并计算每个查询的项目数量以显示占位符。
我已经通过实现访问我的 cloud-firestore 并加载下一页的分页源成功地实现了“唯一的网络方式”。但我正在努力使用 RemoteMediator 方式,因为如何结合 cloud-firestore 做到这一点的教程为零。
我将提供我当前的方法(pagingSource 方式)以及我的 RemoteMediator 走了多远。我很感激任何帮助。
存储库
当前方法(工作)
RemoteMediator 方法(没有线索)
android - 如果使用 Paging 3 库,onRestoreInstanceState 不适用于 RecyclerView 布局管理器
我在保存 RecyclerView 状态时遇到问题,它通过保存布局管理器状态并在恢复片段后使用它来解决。(感谢@HarisDautović)
但如果使用分页 3 库它不起作用。只是导入这个库会导致问题,即使不在应用程序中使用它。
请查看此问题并接受答案的评论以获取更多详细信息: RecyclerView with StaggeredGridLayoutManager in ViewPager, 在返回片段时自动排列项目
android - Android Paging 3 库:如何使用新参数更改列表?
我有一个显示搜索项目列表的搜索片段。如果用户输入某些内容,我将该字符串作为新的查询参数传递给 url,并使用 paging 3 库获取新列表。
第一个解决方案是:
通过此解决方案,通过更改 url ( showPostList(newUrl)
,列表保持不变。可能在 viewModel 中使用缓存列表。
另一种解决方案是:使用片段showPostList(initUrl)
的in onViewCreated
,然后通过更改参数使用自爆方法:
这项工作,但如果旧列表和新列表有共同的项目,新的列表显示在最后一个共同的可见项目。例如,如果旧列表的第 5 位项目与新列表的第 7 位相同,则在列表更改以显示新列表后,它从第 7 位而不是第一项开始。
我在这里找到了另一个解决方案:
但是通过使用此列表刷新返回片段,有时Recyclerview
状态更改。