我有一种情况,我需要将一些分组的项目放到android的Google Map中。每个组都可以从地图中添加/删除。每个组包含一些项目。例如
Group 1
Items -> 1,2,3
Group 2
Items -> 4,5,6
Group 3
Items -> 7,8,9
有了这种数据结构,我希望我的地图视图可以观看几件事
在视图模型中,初始思想就是这样
val groups = MutableLiveData<HashMap<String, LiveData<List<Item>>>>()
然后我的视图可以观察到从HashMap添加/删除的更改
viewModel.groups.observe(this, Observer { groups ->
groups.values.forEach { items ->
items.observe(this, Observer {
// Do something with the list of items
})
}
})
这种方法的问题在于,视图将需要跟踪每个观察者的项目,并确保如果从地图中删除了一个组,则该视图确保将其自身作为观察者移除。
这导致尝试在视图模型中使用MediatorLiveData
val groups = MediatorLiveData<HashMap<String, List<Item>>>()
然后为每个组添加/删除源。源将从数据库中查询每个组项目,完成后将更新调解器实时数据图以添加或删除项目。然后更新整个地图的值。
此方法的问题在于,当一个组发生更改时,将为所有组通知您的视图。我的第一种方法是通过分别观察每个组项目来解决这个问题。
感觉这两个选项都不可行。如何观察地图添加/删除的变化以及地图中每个条目的项目列表?