Android 架构组件 ViewModel 上下文问题
Android Architecture Components ViewModel context issue
我正在尝试使用 Android 中的新架构组件,到目前为止它运行良好。但是,我遇到了架构问题。
我有一个 MainActivity
,它承载了一堆片段,A
、B
和 C
。直到现在,每次我需要我的 ViewModel (VM) 时,我都会在 MainActivity
的上下文中获取它(像这样:MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
)。现在考虑一下:
- 片段
C
让用户select一些值,并将其写入VM
。
- 片段
A
使用片段C
让用户select值,然后A
直接从VM
读取值并显示在其 UI.
- 片段
B
使用与片段 A
相同的方法。
问题是,由于 VM
总是在 MainActivity
的上下文中,如果在 B
之前使用了片段 A
,则该值将仍然可用,B
将显示一些旧数据。
我看到的最明显的解决方案是分别在片段 A
和 B
的上下文中创建 VM
。但是后来我不知道如何让片段 C
访问那些 VM
s.
我也可以在片段 C
的上下文中创建 VM
,但这需要片段 A
和 B
来创建 [=14] 的实例=],我认为这不是一个好的解决方案。
第三种解决方案是保持当前方法并在适当的时候清除 VM
中的数据,但我认为这也很混乱。
最好的方法是什么?
您可以在 VM 中进行映射,并将 A
和 B
的值存储在不同的键下。
因此,当 A
启动 C
时,它会将其 A_key
作为参数传递。当用户在 C
中选择一个值时,它将使用 A_key
作为键存储在 VM 的映射中。当 A
检查一个值是否可用时,它只检查为 A_key
.
存储的值
B
和 B_key
相同。
我正在尝试使用 Android 中的新架构组件,到目前为止它运行良好。但是,我遇到了架构问题。
我有一个 MainActivity
,它承载了一堆片段,A
、B
和 C
。直到现在,每次我需要我的 ViewModel (VM) 时,我都会在 MainActivity
的上下文中获取它(像这样:MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
)。现在考虑一下:
- 片段
C
让用户select一些值,并将其写入VM
。 - 片段
A
使用片段C
让用户select值,然后A
直接从VM
读取值并显示在其 UI. - 片段
B
使用与片段A
相同的方法。
问题是,由于 VM
总是在 MainActivity
的上下文中,如果在 B
之前使用了片段 A
,则该值将仍然可用,B
将显示一些旧数据。
我看到的最明显的解决方案是分别在片段 A
和 B
的上下文中创建 VM
。但是后来我不知道如何让片段 C
访问那些 VM
s.
我也可以在片段 C
的上下文中创建 VM
,但这需要片段 A
和 B
来创建 [=14] 的实例=],我认为这不是一个好的解决方案。
第三种解决方案是保持当前方法并在适当的时候清除 VM
中的数据,但我认为这也很混乱。
最好的方法是什么?
您可以在 VM 中进行映射,并将 A
和 B
的值存储在不同的键下。
因此,当 A
启动 C
时,它会将其 A_key
作为参数传递。当用户在 C
中选择一个值时,它将使用 A_key
作为键存储在 VM 的映射中。当 A
检查一个值是否可用时,它只检查为 A_key
.
B
和 B_key
相同。