关于viewmodel创建
1.ViewModelProviders.of()被弃用了
从Android官网可以看到创建ViewModel的方法ViewModelProviders.of()已经被弃用了,我们需要创建ViewModel,只用使用new ViewModelProvider的方式。那么我们应该如何使用呢?
2.使用new ViewModelProvider方法创建ViewModel
从官方给的文档来看,ViewModelProvider有两个构造方法,如下图
这两个构造方法区别在于:
(1) 第一个构造方法的第一个参数ViewModelStoreOwner是viewmodel的持有者,在activity中传入this即可,如果在fragment中,传入requireActivity()即可
(2) 第二个构造方法的第一个参数ViewModelStore是viewmodel的保存容器,工厂创建viewmodel之后,将放入这个容器。
两个构造方法的第二个参数是Factory参数,用于创建viewmodel对象。如果我们需要创建的是viewmodel则使用new ViewModelProvider.NewInstanceFactory()即可;如果需要创建的是AndroidViewModel则使用new ViewModelProvider.AndroidViewModelFactory(this.getApplication())。
//1. WordViewModel继承AndroidViewModel
public class WordViewModel extends AndroidViewModel{
public WordViewModel(@NonNull Application application) {
super(application);
}
}
//ViewModel创建方法
WordsViewModel wordsViewModel = new ViewModelProvider(this, new ViewModelProvider.AndroidViewModelFactory(this.getApplication())).get(WordViewModel.class);
//2.WordViewModel继承ViewModel
public class WordViewModel extends ViewModel {}
//ViewModel创建方法
WordsViewModel wordsViewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(WordViewModel.class);