Android 房间数据源。具有多视图RecyclerView的工厂
我在DAO上有以下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
选择
@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
一样工作的解决方案