Android架构组件中的ViewModel上下文问题

4
我正在尝试在Android中使用新的Architecture组件,目前为止它运行得非常好。然而,我遇到了一个架构问题。
我有一个托管一堆片段A、B和C的MainActivity。到目前为止,每当我需要我的ViewModel(VM)时,我都在MainActivity的上下文中获取它(像这样:MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);)。现在考虑这个:
- 片段C让用户选择某个值,并将其写入VM。 - 片段A使用片段C让用户选择该值,然后读取该值直接从VM,并在其UI中显示。 - 片段B使用与片段A相同的方法。
问题是,由于VM始终处于MainActivity的上下文中,如果在B之前使用过A,则该值仍将可用,B将显示一些旧数据。
我看到的最明显的解决方案是在片段A和B的上下文中创建VM。但是我无法想出如何让片段C访问那些VM。
我也可以在片段C的上下文中创建VM,但这需要片段A和B创建一个实例C,我认为这不是一个好的解决方案。
第三个解决方案是继续当前的方法,并在适当的时候清除VM中的数据,但我认为那也很混乱。
哪种方法是最好的?
1个回答

0

您可以在虚拟机中建立映射,并将AB的值存储在不同的键下。

因此,当A启动C时,它将其A_key作为参数传递。当用户在C中选择一个值时,它将使用A_key作为键存储在VM的映射中。当A检查值是否可用时,它仅检查存储在A_key下的值。

BB_key同理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接