具有自定义数据源的 Android 分页库可抵消回收器视图中的项目



我正在制作一个待办事项列表应用程序,我想要那个花哨的列表,其中任务被分组在带有日期的标题下(类似于Splen-DO的标题(。我正在使用带有房间(作为数据存储(的Android分页库(带有RecyclerView(。对于标题,我使用的是RecyclerView的视图类型,为了将标题添加到列表中,我使用的是自定义数据源,它包装了房间的数据源,而不是返回任务对象,它返回的对象可以是任务或标题。

它的工作原理是这样的:

  • 分页库要求我的数据源加载项目,它计算偏移量 由标头引起,从数据库加载数据并将标头添加到 任务(和标题(的列表并返回它。
  • 分页库使用我的适配器创建视图持有人以及视图和显示 结果

在我对数据库进行更改之前,一切正常。项目在回收器视图中无缘无故地移动,有些重复,并且在回收器视图的乞求上有一些空占位符。到目前为止,我一直在尝试解决"乞讨上的空占位符"问题。

我首先检查了我的数据源,它返回正确的数据,没有偏移量。然后我检查了适配器。getItem(( 方法返回所有带有偏移量的项和开头的一些空项。当我开始深入挖掘时,我发现它是由PagedStorage中的一些mLoadNullCount引起的,我不知道它的用途,因为它没有文档。

截图

列表工作正常
列表工作正常
列表顶部的空占位符,在我对列表进行更改后
空占位符
列表错误(gif(
错误列表

一些代码

请忽略一些变量和类名,我使用了一些捷克语单词,这样它们就不会弄乱某些系统类.
Ukol = 任务

适配器:UkolListAdapter.java

数据源:MyDatasource.java
片段:UkolListFragment.java

笔记

如果您需要更多代码或解释,请发表评论,我会为您添加。

编辑

我发现了一个错误。来自 Room 数据库的数据源可能不会在您请求的位置为您提供列表 staritng,而是在它想要的位置,在loadInitial()上,并在onResult()int position参数中为您提供索引(返回的列表开始的位置(。所以我在loadInitial()上返回了错误的数据.所以我添加了一些算法,用于计算我在LoadInitial()中实际返回的数据。我没有解决问题。

您是否在PagedList.config.Builder中尝试过setEnablePlaceholders(false)

https://developer.android.com/topic/libraries/architecture/paging/data#define-paging-config

相关内容

最新更新