Jetpack练手(01):ViewModel

参考 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>

包含三个控件:

  1. tvScore - TextView,显示分数;
  2. btnAddOne - Button,分数加 1 的按钮;
  3. 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 效果

效果如下:

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值