Android架构组件ViewModel上下文问题

时间:2017-09-11 08:54:36

标签: android android-fragments android-architecture-components

我正在尝试在Android中使用新的架构组件,到目前为止它已经运行得很好。但是,我偶然发现了一个架构问题。

我有一个MainActivity来托管一堆片段,ABC。到目前为止,每当我需要ViewModel(VM)时,我都会在MainActivity的上下文中获取它(如下所示:MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);)。现在考虑一下:

  • 片段C允许用户选择一些值,并将其写入VM
  • 片段A使用片段C让用户选择值,然后A直接从VM读取值并在其UI中显示。
  • 片段B使用与片段A相同的方法。

问题是,由于VM始终位于MainActivity的上下文中,如果A之前已使用片段B,则该值仍为可用,B会显示一些旧数据。

我看到的最明显的解决方案是分别在片段VMA的上下文中创建B。但后来我无法弄清楚如何让片段C访问那些VM

我还可以在片段VM的上下文中创建C,但这需要片段AB来创建C的实例,我认为这不是一个很好的解决方案。

第三个解决方案是保持当前的方法并在适当时清除VM中的数据,但我认为这也很混乱。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以在VM中创建映射,并将AB的值存储在不同的键下。

因此,当A启动C时,它会将A_key作为参数传递。当用户在C中选择一个值时,它会使用A_key作为键存储在VM的地图中。当A检查某个值是否可用时,它只检查为A_key存储的值。

BB_key相同。