Android 房间数据源。具有多视图RecyclerView的工厂

Android 房间数据源。具有多视图RecyclerView的工厂,android,mvvm,android-recyclerview,androidx,android-paging,Android,Mvvm,Android Recyclerview,Androidx,Android Paging,我在DAO上有以下选择 @Query("SELECT * FROM todo ORDER BY time DESC") abstract DataSource.Factory<Integer, TodoItem> getAll(); @Query(“按时间描述从todo订单中选择*) 抽象数据源.Factory getAll(); 我有一个只返回上述内容的存储库。在我的模型里 PagedList.Config config = new PagedList.Config.Build

我在DAO上有以下
选择

@Query("SELECT * FROM todo ORDER BY time DESC")
abstract DataSource.Factory<Integer, TodoItem> getAll();
@Query(“按时间描述从todo订单中选择*)
抽象数据源.Factory getAll();
我有一个只返回上述内容的存储库。在我的模型里

PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setInitialLoadSizeHint(40)
            .setPageSize(20)
            .build();

todos = new LivePagedListBuilder<>(todoRepository.getAll(), config).build();
PagedList.Config Config=new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(40)
.setPageSize(20)
.build();
todos=新的LivePagedListBuilder(todoRepository.getAll(),config.build();
该片段只是观察上面的
todos
并在新更新时调用
adapter.submitList(items)

在获取所有数据并用它填充
RecyclerView
之前,我最近刚刚切换到使用
androidx.paging

上面的代码可以很好地适应当前的情况。问题是我需要支持多个视图。更确切地说,我需要将日期添加到具有该日期的第一个元素的顶部。在升级之前,我循环项目并在需要的地方添加
DateHeader
项目(并在适配器中处理多个视图类型),但使用此新方法,我无法编辑
DataSource.Factory
提供的内容

使用
项目装饰
或在每个项目中添加日期并更改其可见性不是选项

我还将日期保存在数据库中,因此我可以根据
分组
,并根据
日期
获取物品计数,如果这有帮助的话


有办法解决这个问题吗?仅供参考,这里没有网络通信,所有内容都是本地的,只保存在数据库中。

目前似乎不支持向DAO的
数据源.Factory返回的列表中添加其他项目

由于我所需要的只是在第一个项目的顶部添加日期,因此我最终使用SQLite解决了这个问题

下面是一个查询,它是否可以帮助某人:

select * from (
    select tDate.*, 0 as type from todos as tDate group by date having max(time) 
  UNION 
    select tItem.*, 1 as type from todos tItem
  ) as tView 
order by tView.time desc, tView.type asc
我将上述查询定义为一个

谢天谢地,
PagedListAdapter
就像普通的
适配器一样,它支持多个视图,如果类型是
0
,我会从上面打印一个日期项,否则我会打印一个常规项


这不是最好的解决方案,但它是我唯一一个能够让它像常规的具有多种类型的
RecycleView一样工作的解决方案。

似乎目前不支持向DAO的
DataSource.Factory
返回的列表中添加其他项

由于我所需要的只是在第一个项目的顶部添加日期,因此我最终使用SQLite解决了这个问题

下面是一个查询,它是否可以帮助某人:

select * from (
    select tDate.*, 0 as type from todos as tDate group by date having max(time) 
  UNION 
    select tItem.*, 1 as type from todos tItem
  ) as tView 
order by tView.time desc, tView.type asc
我将上述查询定义为一个

谢天谢地,
PagedListAdapter
就像普通的
适配器一样,它支持多个视图,如果类型是
0
,我会从上面打印一个日期项,否则我会打印一个常规项

这不是最好的解决方案,但它是我唯一一个能够让它像一个具有多种类型的常规
RecycleView
一样工作的解决方案