我正在尝试在Android中使用新的架构组件,到目前为止它已经运行得很好。但是,我偶然发现了一个架构问题。
我有一个MainActivity
来托管一堆片段,A
,B
和C
。到目前为止,每当我需要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
会显示一些旧数据。
我看到的最明显的解决方案是分别在片段VM
和A
的上下文中创建B
。但后来我无法弄清楚如何让片段C
访问那些VM
。
我还可以在片段VM
的上下文中创建C
,但这需要片段A
和B
来创建C
的实例,我认为这不是一个很好的解决方案。
第三个解决方案是保持当前的方法并在适当时清除VM
中的数据,但我认为这也很混乱。
最好的方法是什么?
答案 0 :(得分:0)
您可以在VM中创建映射,并将A
和B
的值存储在不同的键下。
因此,当A
启动C
时,它会将A_key
作为参数传递。当用户在C
中选择一个值时,它会使用A_key
作为键存储在VM的地图中。当A
检查某个值是否可用时,它只检查为A_key
存储的值。
B
和B_key
相同。