- ViewModel 是用来管理数据的。
- ViewModelProvider是ViewModel的管理者
- ViewModelProvider.Factory是工厂类
ViewModel类
class TimerViewModel : ViewModel() {
//
}
通过viewModels创建实例
var timerViewModel: timerViewModel by viewModels()
为什么TaskViewModel需要ViewModel的工厂类?
class TaskViewModel(private val repository: TaskRepository) : ViewModel() {
}
因为TaskViewModel需要TaskRepository这个参数,而viewModels默认通过无参构造函数创建,有参数只能通过工厂类创建
ViewModel的工厂类是什么?
作用:专门用来创建ViewModel对象的 “工具类”。下面是案例附带解释:
// 实现ViewModelProvider.Factory接口
class UserViewModelFactory(private val repository: UserRepository) : ViewModelProvider.Factory {
// 重写create方法:创建ViewModel实例
override fun <T : ViewModel> create(modelClass: Class<T>): T {
// 校验要创建的ViewModel类型是否是UserViewModel
if (modelClass.isAssignableFrom(UserViewModel::class.java)) {
// 用带参构造函数创建UserViewModel,并强转为泛型T
return UserViewModel(repository) as T
}
// 如果类型不对,抛出异常
throw IllegalArgumentException("未知的ViewModel类型")
}
}