RecyclerView Adapter 依赖两个数据源
RecyclerView Adapter depends on two sources of data
假设
- 我有一个用户有多个帐户。
- 每个帐户可能有他们控制的多个页面。
- 页面可以由一个或多个帐户控制。
- 所有这些数据都存储在带有实体 {UserEntity、PageEntity、User_Page_Entity 的房间数据库中},其中 User_Page_Entity 通过仅存储用户的主键 ID 来控制用户与其页面之间的关系。
我的 Recycler View 应该显示所有页面,其中一些页面由当前登录的用户控制,其中我的 Recycler View 的项目如下所示:
其中 red/green 圆圈表示该页面是否属于当前登录用户。
我的问题是我的 Recycler View 依赖于两个数据源:
LiveData<List<PageEntity>>
显示数据库中存储的所有页面。
LiveData<List<User_Page_Entity>>
表示当前用户控制了哪些页面。
由于 Room 会在数据库发生变化时同时向其所有观察者启动一个通知程序,如果我在两个源上初始化观察者并且每当它们发生变化时都会在适配器上启动 notifyDataSetChanged
,它导致同时调用两个 notifyDataSetChanged
引发异常,即在两个方法调用之一中分离的持有者之一要求再次分离。
IllegalArgumentException: called detach on an already detached child ViewHolder
相比之下,我不能只对一个观察者调用 notifyDataSetChanged
,因为我不知道 Room 会首先调用哪个观察者。
现在我不知道该怎么做以及如何在同一个回收器视图中维护这两个数据源之间的关系,经过两天的思考我完全愿意听取任何建议或意见并实施它使应用程序尽可能干净编码
这个问题的答案在我的其他相关 and its
当然,在有人提供另一个好的解决方案之前,我仍然乐于接受建议,但我想 post 我做了什么来解决我的问题,以防将来有人看到我的问题。
假设
- 我有一个用户有多个帐户。
- 每个帐户可能有他们控制的多个页面。
- 页面可以由一个或多个帐户控制。
- 所有这些数据都存储在带有实体 {UserEntity、PageEntity、User_Page_Entity 的房间数据库中},其中 User_Page_Entity 通过仅存储用户的主键 ID 来控制用户与其页面之间的关系。
我的 Recycler View 应该显示所有页面,其中一些页面由当前登录的用户控制,其中我的 Recycler View 的项目如下所示:
其中 red/green 圆圈表示该页面是否属于当前登录用户。
我的问题是我的 Recycler View 依赖于两个数据源:
LiveData<List<PageEntity>>
显示数据库中存储的所有页面。LiveData<List<User_Page_Entity>>
表示当前用户控制了哪些页面。
由于 Room 会在数据库发生变化时同时向其所有观察者启动一个通知程序,如果我在两个源上初始化观察者并且每当它们发生变化时都会在适配器上启动 notifyDataSetChanged
,它导致同时调用两个 notifyDataSetChanged
引发异常,即在两个方法调用之一中分离的持有者之一要求再次分离。
IllegalArgumentException: called detach on an already detached child ViewHolder
相比之下,我不能只对一个观察者调用 notifyDataSetChanged
,因为我不知道 Room 会首先调用哪个观察者。
现在我不知道该怎么做以及如何在同一个回收器视图中维护这两个数据源之间的关系,经过两天的思考我完全愿意听取任何建议或意见并实施它使应用程序尽可能干净编码
这个问题的答案在我的其他相关
当然,在有人提供另一个好的解决方案之前,我仍然乐于接受建议,但我想 post 我做了什么来解决我的问题,以防将来有人看到我的问题。