调用时
ViewModelProviders.of(this),您实际上创建/保留了
ViewModelStore绑定到的
this,因此不同的Activity具有不同的特性,
ViewModelStore并且每个Activity
使用给定的工厂
ViewModelStore创建a的不同实例
ViewModel,因此您不能
ViewModel在不同的
ViewModelStores中具有相同的a实例。
但是,您可以通过传递自定义ViewModel工厂的单个实例(充当单例工厂)来实现此目的,因此它将始终
ViewModel在不同活动之间传递您的同一实例。
例如:
public class SingletonNameViewModelFactory extends ViewModelProvider.NewInstanceFactory { NameViewModel t; public SingletonNameViewModelFactory() { // t = provideNameViewModelSomeHowUsingDependencyInjection } @Override public NameViewModel create(Class<NameViewModel> modelClass) { return t; }}因此,您需要制作
SingletonNameViewModelFactory单例(例如,使用Dagger)并像这样使用它:
mModel = ViewModelProviders.of(this,myFactory).get(NameViewModel.class);
注意:
ViewModel在不同范围之间保留s是一种反模式。强烈建议保留您的数据层对象(例如,使您的DataSource或Repository单例)并在不同的作用域(活动)之间保留数据。
阅读此文章的详细信息。



