具有自定义数据源偏移量的 Android 分页库 RecyclerView 中的项目

Posted

技术标签:

【中文标题】具有自定义数据源偏移量的 Android 分页库 RecyclerView 中的项目【英文标题】:Android paging library with custom datasource offsets items in RecyclerView 【发布时间】:2018-10-23 06:19:45 【问题描述】:

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

它是这样工作的:

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

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

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

截图

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

一些代码

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

适配器:UkolListAdapter.java 资料来源:MyDatasource.java 片段:UkolListFragment.java

注意事项

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

编辑

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

【问题讨论】:

您好,我最近遇到了同样的问题...您找到解决方案了吗? 不,我放弃了。我认为我采用的方法不是最好的。 【参考方案1】:

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

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

【讨论】:

不幸的是,它没有帮助

以上是关于具有自定义数据源偏移量的 Android 分页库 RecyclerView 中的项目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 codeigniter 分页库回显页码?

markdown Android分页库教程

使用分页库时,观察者显示列表大小为零

分页库过滤器/搜索

Android官方架构组件Paging:分页库的设计美学

Apollo 客户端中基于偏移量的分页错误