常规的ViewModel,直接通过两种办法初始化:
kotlin
//第一种
private val mViewModel by lazy { ViewModelProvider(this)[XXViewModel::class.java] } //或者不要lazy直接创建
//第二种
private val mViewModel : ChannelViewModel1 by viewModels()
第一种传统办法;第二种,通过androidx扩展函数实现懒加载。
如果想传参怎么办?
一般情况,我们直接自己添加一个函数即可:
kotlin
class XXXViewModel : ViewModel() {
fun initBefore(data: Data) {
//...
}
}
第二种:
kotlin
private val mViewModel : XXXViewModel by viewModels() {
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return XXXViewModel("data1", 1) as T
}
}
}
class XXXViewModel(private val data1:String, private val data2:Int) : ViewModel()
其实这种比较适合依赖注入自动处理的。构造函数是带参数的。
因此,mViewModel by lazy { ViewModelProvider(this)[XXViewModel::class.java]会报错的。