安卓学习之《第一行代码3》学习笔记(5)KotLin

本文介绍了ViewModel在Android Jetpack中的基础概念,生命周期管理,以及如何在实际项目中创建、传递参数和持久化数据。通过实例演示了ViewModel如何简化界面与数据交互,适合初学者参考。
摘要由CSDN通过智能技术生成

回顾本周需要学习的东西还有很多,这周简单学习了一下《第一行代码3》中viewModel的使用,分享出来供大家学习参考。

一、ViewModel的认识和简单使用

(一)ViewModel的认识

  1. 对于ViewModel都不陌生,或多或少都有接触过,受到大家的推崇,但是我对于实际的使用确实很少。ViewModel是Jetpack中最重要的组件之一了,可以帮助Activity分担一部分工作,它是专门用于存放与界面相关的数据的,可以在一定程度上减少Activity中的逻辑。

2.viewModel的生命周期

viewModel的生命周期生命周期如图所示,他比activity的生命周期要长,只有activity被销毁的时候才会一起销毁。所以在activity横竖屏切换的时候,数据不会丢失。

        

(二)简单使用

1、添加依赖

dependencies {
    ....
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
}

2、创建MainViewModel

class MainViewModel: ViewModel() {
    var counter=0

}

3、修改MainActivity

class MainActivity : AppCompatActivity() {
    lateinit var viewModel: MainViewModel
    private val binding by lazy {
        ActivityMainBinding.inflate(layoutInflater)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        viewModel= ViewModelProviders.of(this).get(MainViewModel::class.java)
        binding.plusOneBtn.setOnClickListener {
            viewModel.counter++
            refreshCount()
        }
        refreshCount()
    }
    private fun refreshCount() {
        binding.infoText.text=viewModel.counter.toString()
    }
}

点击运行就可以简单实现ViewModel加载数据了,

其中ViewModelProviders.of(this).get(MainViewModel::class.java),这里不要直接创建ViewModel实例。

(三)向viewModel传递参数

1.在实际的使用中,viewModel还可以保存数据,这样可以保证在退出的时候,数据不会被清除。

只需要使用ViewModelProvider.Factory。

2.实例代码

修改MainViewModel设置主构造函数

class MainViewModel(countReserved:Int): ViewModel() {
    var counter=countReserved
}

创建MainViewModelFactory,实现ViewModelProvider.Factory接口

class MainViewModelFactory(private val countReserved:Int):ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return MainViewModel(countReserved) as T
    }
}

修改MainActivity,将数据保存,采用的mmkv与getShareaPreferences类似

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(binding.root)
    MMKV.initialize(this)
    kv = MMKV.defaultMMKV()
    val countReserved=kv.decodeInt("a", 0)
    viewModel=     ViewModelProviders.of(this,MainViewModelFactory(countReserved)).get(MainViewModel::        class.java)
    binding.plusOneBtn.setOnClickListener {
        viewModel.counter++
        refreshCount()
    }
    refreshCount()
}
override fun onPause() {
    super.onPause()
    kv.encode("a", viewModel.counter)
}

总结:在这里简单实现了viewModel的用法,但是只是大致了解一下,与实际使用还有很大差距。本笔记参考自《第一行代码3》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值