1 回答
TA贡献2051条经验 获得超10个赞
我以前遇到过这个问题,我通过这样做来解决它。在您的活动中,创建您的ViewModel工厂,如下所示:
//Inside MyActivity
ViewModelProvider.Factory factory = new ViewModelProvider.Factory() {
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new MyAndroidViewModel(getApplication(),
"My string!");
}
};
然后用它来创建你的ViewModel:
viewModel = ViewModelProviders.of(this, factory).get(MyAndroidViewModel.class);
更新:
由于ViewModelProviders该类已被弃用,更新后的答案如下。工厂和以前一样,只是换成了 Kotlin。
var factory = object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return SimpleAndroidViewModel(activity!!.application,
"My string!") as T
}
}
但是,我们创建 ViewModel 实例的行已经改变,现在我们正在使用ViewModelProvider该类。
private val viewModel: SimpleAndroidViewModel by lazy {
ViewModelProvider(this, factory).get(SimpleAndroidViewModel::class.java)
}
添加回答
举报