4

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

我有一个MainActivity托管一堆片段、ABC. 直到现在,每次我需要我的 ViewModel (VM) 时,我都会在MainActivity(像这样:)的上下文中获取它MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);。现在考虑一下:

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

问题是,由于VM总是在 的上下文中,如果之前已经使用了MainActivity片段,则该值仍然可用,并且会显示一些旧数据。ABB

我看到的最明显的解决方案是分别VM在片段A和上下文中创建B。但是后来我不知道如何让片段C访问那些VMs。

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

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

最好的方法是什么?

4

1 回答 1

0

A您可以在 VM 中进行映射,并将值存储B在不同的键下。

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

B和相同B_key

于 2017-09-11T09:12:35.860 回答