我正在尝试在 Android 中使用新的架构组件,到目前为止效果很好。但是,我偶然发现了一个架构问题。
我有一个MainActivity
托管一堆片段、A
、B
和C
. 直到现在,每次我需要我的 ViewModel (VM) 时,我都会在MainActivity
(像这样:)的上下文中获取它MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
。现在考虑一下:
- 片段
C
让用户选择一些值,并将其写入VM
. - Fragment
A
使用FragmentC
让用户选择值,然后A
直接从中读取值VM
并在其 UI 中显示它。 - Fragment
B
使用与 fragment 相同的方法A
。
问题是,由于VM
总是在 的上下文中,如果之前已经使用了MainActivity
片段,则该值仍然可用,并且会显示一些旧数据。A
B
B
我看到的最明显的解决方案是分别VM
在片段A
和上下文中创建B
。但是后来我不知道如何让片段C
访问那些VM
s。
我也可以VM
在片段的上下文中创建C
,但这需要片段A
并B
创建一个实例C
,我认为这不是一个好的解决方案。
第三种解决方案是保留当前方法并VM
在适当的时候清除数据,但我认为这也很混乱。
最好的方法是什么?