8

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

它是这样工作的:

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

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

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

截图

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

一些代码

请忽略一些变量和类名,我使用了一些捷克语单词,以免它们与某些系统类混淆。
Ukol = 任务

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

笔记

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

编辑

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

4

1 回答 1

0

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

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

于 2018-06-06T11:56:12.170 回答