ViewModel
基本用法
添加依赖:
def lifecycle_version = "2.6.0-alpha01" def arch_version = "2.1.0"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
|
比较好的编程规范是给每一个 Activity 和 Fragment 都创建一个对应的 ViewModel:
MainViewModel.ktclass MainViewModel : ViewModel() {
val counter = 0 }
|
MainActivity.ktclass MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
binding.plusOneBtn.setOnClickListener { viewModel.count++ refreshCounter() } refreshCounter() }
private fun refreshCounter() { infoText.text = viewModel.counter.toString() } }
|
ViewModel 有独立的生命周期,并且长于 Activity,所以不可以直接创建 ViewModel 的实例,而是一定要通过 ViewModelProvider
来获取 ViewModel 实例,语法规则如下:
ViewModelProvider(<你的Activity或Fragment实例>).get(<你的ViewMode>::class.java)
|
向 ViewModel 传递参数
添加 countReserved
参数用于记录之前保存的值,并在初始化的时候赋值给 counter
变量:
MainViewModel.ktclass MainViewModel(countReserved: Int) : ViewModel() {
val counter = countReserved
}
|
参考