大家都知道,不带参数的ViewModel获取方法使用非常简单,
final UserModel viewModel = ViewModelProviders.of(this).get(UserModel.class);
那如果一个带参数的ViewModel,应该如何获取呢?
class MsgActivityModel(extras: Bundle?) : ViewModel() {
}
它的使用需要定义一个继承于AndroidViewModelFactory的工厂类,
private inner class MsgViewModelFactory(application: Application) : ViewModelProvider.AndroidViewModelFactory(application) {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass == MsgActivityModel::class.java) {
return MsgActivityModel(intent.extras) as T
}
return super.create(modelClass)
}
}
使用时,ViewModelProviders.of()方法带上自定义的Factory参数就可以了
val msgActivityModel = ViewModelProviders.of(this, MsgViewModelFactory(AbsApplication.getInst())).get(MsgActivityModel::class.java)