我正在尝试在Android中使用新的体系结构组件,到目前为止,它运行得很好。然而,我无意中遇到了一个建筑问题。
我有一个MainActivity,它承载了大量的片段,A、B和C。直到现在,每次我需要我的ViewModel (VM)时,我都会在MainActivity的上下文中获取它(比如:MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);)。现在考虑这一点:
C允许用户选择一些值,并将其写入VM。A使用片段C让用户选择值,然后A直接从VM读取值并在其UI中显示。B使用与片段A相同的方法。问题是,由于VM总是在MainActivity的上下文中,如果在B之前使用了片段A,那么这个值仍然是可用的,B将显示一些旧数据。
我看到的最明显的解决方案是分别在片段VM和B上下文中创建B。但是,我想不出如何让片段C访问那些VM。
我也可以在片段VM的上下文中创建C,但是这需要片段A和B来创建C实例,我不认为这是一个很好的解决方案。
第三种解决方案是保留当前的方法,并在适当的时候清除VM中的数据,但我认为这也很麻烦。
做这件事最好的方法是什么?
发布于 2017-09-11 09:12:35
您可以在VM中进行映射,并将A和B的值存储在不同的键下。
因此,当A启动C时,它将其A_key作为参数传递。当用户在C中选择一个值时,它将以A_key作为键存储在VM的映射中。当A检查一个值是否可用时,它只检查为A_key存储的值。
B和B_key也是如此。
https://stackoverflow.com/questions/46151703
复制相似问题