Jetpack 中的 ViewModel - 使用篇

本文介绍了AndroidJetpack库中的ViewModel组件,用于存储和管理UI相关的数据,实现UI与业务逻辑分离,以及如何在MainActivity中创建和使用MyViewModel,配合LiveData实现双向数据绑定。
摘要由CSDN通过智能技术生成

什么是 ViewModel

ViewModel 是 Jetpack 中的一个组件,它旨在存储和管理与UI相关的数据,ViewModel 的设计思想是将 UI 层与业务逻辑分离,使得数据在配置更改(例如屏幕旋转) 时仍然保持可用。ViewModel 独立于 UI 层的生命周期,并在配置更改时保留其状态,因此可以轻松地处理生命周期感知的数据。

ViewModel 通常与 LiveData 结合使用,后者是一个可观察的数据容器,LiveData 使数据在 ViewModel 和 UI 之间进行双向绑定成为可能,从而使数据的更新可以自动反映在 UI 上。

build.gradle 增加 ktx 依赖

dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.32"
        implementation 'androidx.core:core-ktx:1.2.0'
}

如何使用 ViewModel

 MyViewModel 

class MyViewModel :ViewModel(){
    var num:Int = 0;
}

MainActivity 引用 ViewModel

class MainActivity : AppCompatActivity() {

    /**
     * ViewModel : 保存数据稳定性,横竖屏切换
     */
    private lateinit var myViewModel: MyViewModel;

    private var tvMsg: TextView? = null

    private var testNum =0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tvMsg = findViewById(R.id.tvMsg)

        myViewModel = ViewModelProvider(
            this,
            ViewModelProvider.NewInstanceFactory()
        ).get(MyViewModel::class.java)

        tvMsg?.text = "累加:${myViewModel.num}"
//        tvMsg?.text = "累加:${testNum}"

        findViewById<Button>(R.id.btMsg).setOnClickListener {
            tvMsg?.text = "累加:${++myViewModel.num}"
//            tvMsg?.text = "累加:${++testNum}"
        }
    }

    /*override fun onRetainCustomNonConfigurationInstance(): Any? {
        return super.onRetainCustomNonConfigurationInstance()
    }*/
}

activity_main 布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id = "@+id/btMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:text="点击我呗"/>

    <TextView
        android:id = "@+id/tvMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

参考:

【Android】Jetpack 中的 ViewModel - 使用篇 - 掘金

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值