我有:
obj
的表。Obj
。ObjEntity
。ObjDao
。Obj
的RecyclerView。在我的Obj
类中,我添加了一个插入方法-Obj#Post
,该方法可以将Obj
存储到应用程序的数据库中(句柄转换为ObjEntity
,子实体/列表等的键)
首先想到的是重新查询所有obj
的{{1}}表,然后再获取此obj
,将其映射到ObjEntity[]
,然后再更新(所有Obj[]
的内存版本-并通知回收者视图适配器更新。
这显然不是最好的方法,因为它只会在插入时更新,而不会删除等。这也不遵循关注点分离的模式。
我理想的情况是让RecyclerView动态查询数据库本身,并相应地进行更新。但是,适配器的实现基于有序列表结构而工作。现在,obj
并不总是具有连续的objs
-因此,除非我进行了一些时髦的破解,以将id
返回的值映射到每个ID,否则似乎不会像它会工作。同样,最重要的是,此解决方案没有通知适配器的更改。通常它只是在进行查询-我不知道实现方式,我猜是某种形式的轮询或用户交互触发。
Room是否具有某种形式的回调API,即RecyclerView.Adapter#getItemCount
?
答案 0 :(得分:1)
您需要的是完全在Android体系结构组件中设计的。
只要会议室数据库中发生更改,LiveData
就会通知视图。
ViewModel
处理独立于UI的数据操作,即完整的CURD操作。
Repository
模块处理数据操作。他们提供了一个干净的API,以便应用程序的其余部分可以轻松检索此数据。他们知道从何处获取数据以及更新数据时API会执行什么操作。您可以将存储库视为不同数据源(例如持久性模型,Web服务和缓存)之间的中介。
如果您想在recyclerview
中使用它进行分页,请使用PagedListAdapter
而不是RecyclerView.Adapter