Android Jetpack 组件

ViewModel

基本用法

添加依赖:

def lifecycle_version = "2.6.0-alpha01"
def arch_version = "2.1.0"

// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

比较好的编程规范是给每一个 Activity 和 Fragment 都创建一个对应的 ViewModel:

MainViewModel.kt
class MainViewModel : ViewModel() {

val counter = 0

}
MainActivity.kt
class 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.kt
class MainViewModel(countReserved: Int) : ViewModel() {

val counter = countReserved

}

参考

可靠便捷的VPN服务 100 G 月流量,5台设备可用,一年仅需99元!
请我一杯咖啡吧!
八亩山啊 微信 微信
八亩山啊 支付宝 支付宝
八亩山啊 比特币 比特币
  • 本文作者: 八亩山啊
  • 本文链接: https://mumo.fun/posts/13/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!