繁体   English   中英

具有自定义数据源的Android分页库在RecyclerView中抵消项目

[英]Android paging library with custom datasource offsets items in RecyclerView

我正在制作一个TO-DO列表应用程序,我希望有一个花哨的列表,其中任务分组在带有日期的标题下(类似于Splen-DO所具有的)。 我正在使用Android Paging库(带有RecyclerView)和Room(作为数据存储)。 对于标题,我正在使用RecyclerView的视图类型,并将标题添加到我正在使用自定义数据源的列表中,它包含Room的数据源而不是返回任务对象,它返回一个可以是Task或者头。

它的工作原理如下:

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

在我对数据库进行更改之前,一切正常。 物料在RecyclerView中无缘无故变化,有些重复,并且在RecyclerView的乞讨中有一些空的占位符。 到目前为止,我一直在努力解决“乞讨的空占位”问题。

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

截图

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

一些代码

请忽略一些变量和类名,我使用一些捷克语,这样他们就不会搞砸某些系统类。
Ukol =任务

适配器: UkolListAdapter.java
数据源: MyDatasource.java
片段: UkolListFragment.java

笔记

如果您需要更多代码或解释,请留言,我会为您添加。

编辑

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

你在PagedList.config.Builder尝试过setEnablePlaceholders(false)吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM