您的位置:首页 > 手游攻略 > Android开发(Kotlin) ViewModel基本用法示例完整指南

Android开发(Kotlin) ViewModel基本用法示例完整指南

作者:互联网  时间: 2026-09-07 20:10:01  

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Android开发(Kotlin) ViewModel基本用法示例”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

ViewModel基本用法

新建viewmodel

class MyViewModel: ViewModel() {
}

实现一个计数器

class MyViewModel : ViewModel() {
    var count = 0
}

从实现思路看,在activity采用ViewModel,拿到ViewModel的实例需借助ViewModelProvider。点击按钮一次计数器加1

  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityClickBinding.inflate(layoutInflater)
        setContentView(binding.root)
        viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
        binding.clickButC.setOnClickListener {
            viewModel.count++
            refreshCount()
        }
        refreshCount()
    }
    private fun refreshCount() {
        binding.clickTvText.text = viewModel.count.toString()
    }

旋转屏幕后,计数器的数据仍然存在

向ViewModel传递参数

改进上面的例子,保证退出程序后,重新打开,数据任然存在。
修改viewmodel

class MyViewModel(counter: Int) : ViewModel() {
    var count = counter
}

counter记录之前保存的值
从实现思路看,新建ViewModelProvider.Factory,向MyViewModel的构造函数传递数据。添加构造函数,重写create方法,

class MyViewModelFactory(private val counter: Int) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return MyViewModel(counter) as T
    }
}

修改activity

class ClickActivity : ComponentActivity() {
    lateinit var viewModel: MyViewModel
    lateinit var binding:ActivityClickBinding
    lateinit var sp: SharedPreferences
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityClickBinding.inflate(layoutInflater)
        setContentView(binding.root)
        sp = getSharedPreferences("data",MODE_PRIVATE)
        val countSp = sp.getInt("count",0)
        viewModel = ViewModelProvider(this, MyViewModelFactory(countSp)).get(MyViewModel::class.java)
        binding.clickButC.setOnClickListener {
            viewModel.count++
            refreshCount()
        }
        refreshCount()
    }
    private fun refreshCount() {
        binding.clickTvText.text = viewModel.count.toString()
    }
    override fun onPause() {
        super.onPause()
        sp.edit{
            putInt("count",viewModel.count)
        }
    }
}

到此这篇关于Android开发(Kotlin) ViewModel基本用法的文章就介绍到这了,更多相关Android ViewModel用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

您可能感兴趣的文章:
  • Android Jetpack组件ViewModel基本用法详解
  • Android ViewModel与Lifecycles和LiveData组件用法细致说明
  • Android学习总结之Java和kotlin区别超详细分析
  • Android开发Kotlin语言协程中的同时发问题和互斥锁
  • Android开发Kotlin语言协程的依赖及采用示例

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4