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