背景
ViewModelProviders.of(this)已弃用;
//MyViewModel myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
// 已弃用
新方法:
MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
但是有时候有人 this 会报错。
new ViewModelProvider(this)
中 this 报错,是因为没有该构造方法。
解决方法
- 如果你需要 ViewModel 的其他组件,使用了其他依赖,可以解决问题
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0'
- 不需要其他依赖的话,可以转而使用:
MyViewModel myViewModel = new ViewModelProvider(this,
new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class);
创建 AndroidViewModel 应使用:
MyViewModel myViewModel = new ViewModelProvider(this,
new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class);
- 另一种方式是(不推荐,lifecycle-extensions其实也已弃用)
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'