在启动活动中加载数据并将该数据或ViewModel共享给MVVM中的下一个活动

时间:2018-12-19 13:11:00

标签: android mvvm android-architecture-components android-livedata

在我的应用中,我需要从服务器(使用改造)加载一些数据的供稿,该数据已加载到专用的视图模型中。 当前发生的情况是,视图模型在其构造器中调用存储库,然后一旦获取数据,便会通知主活动中的观察片段并相应地更改ui。

但是,假设我想在启动/启动活动期间获取该数据,使用MVVM的实现是什么? 我的意思是,由于视图模型仅与一个活动相关联,因此我们无法在两个活动之间共享相同的视图模型。

那么我们如何在Launcher Activity中加载远程服务器数据,然后在Main Activity中使用它呢?

在这种情况下的最佳做法是什么?

2 个答案:

答案 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