1.ViewModelProviders.of()被弃用了

从Android官网可以看到创建ViewModel的方法ViewModelProviders.of()已经被弃用了,我们需要创建ViewModel,只用使用new ViewModelProvider的方式。那么我们应该如何使用呢?

img

2.使用new ViewModelProvider方法创建ViewModel

从官方给的文档来看,ViewModelProvider有两个构造方法,如下图

img

这两个构造方法区别在于:

(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);