参考 Android 开发教程(使用 Jetpack) 进行 Jetpack 练手。
一、导入依赖
新建 ViewModelDemo
工程,在 build.gradle(Module:app)
中参考 Lifecycle 声明依赖项 导入依赖。
dependencies {
def lifecycle_version = "2.2.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
...
}
二、搭建布局
在 activity_main.xml
搭建简单布局(省略属性),如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
tools:context=".MainActivity">
<TextView
android:id="@+id/tvScore" />
<Button
android:id="@+id/btnAddOne" />
<Button
android:id="@+id/btnAddTwo" />
</androidx.constraintlayout.widget.ConstraintLayout>
包含三个控件:
tvScore
- TextView,显示分数;btnAddOne
- Button,分数加 1 的按钮;btnAddTwo
- Button,分数加 2 的按钮。
整体布局如图:
三、创建 ViewModel
在 com.example.viewmodeldemo
目录下新建 ScoreViewModel
类继承自 ViewModel()
:
class ScoreViewModel(var score: Int = 0) : ViewModel()
四、实现 ViewModel
在 MainActivity
类中声明一个 ScoreViewModel
的实例:
private val scoreViewModel: ScoreViewModel by lazy {
ViewModelProvider(this)[ScoreViewModel::class.java]
}
在 MainActivity.onCreate()
方法中对三个控件进行处理:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tvScore.text = scoreViewModel.score.toString()
btnAddOne.setOnClickListener {
scoreViewModel.score++
tvScore.text = scoreViewModel.score.toString()
}
btnAddTwo.setOnClickListener {
scoreViewModel.score += 2
tvScore.text = scoreViewModel.score.toString()
}
}
五、Demo 效果
效果如下: