Android 的ViewModel

36 阅读1分钟
  • 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类型")
    }
}