观察组中的更改(HashMap),并观察每个组中的项目

时间:2020-06-28 21:07:20

标签: android kotlin android-livedata mediatorlivedata

我有一种情况,我需要将一些分组的项目放到android的Google Map中。每个组都可以从地图中添加/删除。每个组包含一些项目。例如

Group 1
  Items -> 1,2,3
Group 2
  Items -> 4,5,6
Group 3
  Items -> 7,8,9

有了这种数据结构,我希望我的地图视图可以观看几件​​事

  1. 添加/删除组时
  2. 每个组中可能更改的项目

在视图模型中,初始思想就是这样

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>>>()

然后为每个组添加/删除源。源将从数据库中查询每个组项目,完成后将更新调解器实时数据图以添加或删除项目。然后更新整个地图的值。

此方法的问题在于,当一个组发生更改时,将为所有组通知您的视图。我的第一种方法是通过分别观察每个组项目来解决这个问题。

感觉这两个选项都不可行。如何观察地图添加/删除的变化以及地图中每个条目的项目列表?

0 个答案:

没有答案