在我的应用中,我需要从服务器(使用改造)加载一些数据的供稿,该数据已加载到专用的视图模型中。 当前发生的情况是,视图模型在其构造器中调用存储库,然后一旦获取数据,便会通知主活动中的观察片段并相应地更改ui。
但是,假设我想在启动/启动活动期间获取该数据,使用MVVM的实现是什么? 我的意思是,由于视图模型仅与一个活动相关联,因此我们无法在两个活动之间共享相同的视图模型。
那么我们如何在Launcher Activity中加载远程服务器数据,然后在Main Activity中使用它呢?
在这种情况下的最佳做法是什么?
答案 0 :(得分:0)
ViewModel与View之间的关系为one-to-many。与MVP不同。您可以与其他视图共享ViewModel,并且可以为每个视图使用单独的ViewModel。
UPD:似乎您可以创建1个活动,但Splash和Main活动的内容将是片段。因此,通过从启动到主要,您将只交换片段。如果要在两个片段中都创建一个ViewModel
,如下所示:
ViewModelProviders.of(getActivity()).get(MainViewModel.class);
代替:
ViewModelProviders.of(this).get(MainViewModel.class);
在两个片段中您将获得相同的ViewModel
实例。
答案 1 :(得分:0)
viewmodel具有生命周期,当在其他活动或片段中使用viewmodel时,请重新创建和获取数据,如果要保留相同的数据,则无法在片段的构造函数中将viewmodel传递给片段,并保持相同的viewmodel和lifcycle