一、用法
1、ViewModel
(1)在Gradle中引入androidx.lifecycle
//ViewModel
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
(2)创建ViewModle类
class GameViewModel : ViewModel() {
//绑定的view层销毁时触发的事件
override fun onCleared() {
super.onCleared()
}
}
(3)View层中操作
定义并用ViewModelProvider赋值,不能直接用类名赋值。
//定义
private lateinit var viewModel: GameViewModel
//赋值
viewModel = ViewModelProvider(this).get(GameViewModel::class.java)
2、ViewModelFactory
(1)为什么要使用
- ViewModelProvider只能用于构造无参viewModel
- View层可能对应多个ViewModel,使用Factory来根据类别返回不同的ViewModel给外部
(2)使用方法
- 继承ViewModelProvider.Factory,重写onCreate()方法
class ScoreViewModelFactory (private val finalScore: Int) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(ScoreViewModel::class.java)) {
return ScoreViewModel(finalScore) as T
}
throw IllegalArgumentException("Unknown