Android开发(Kotlin) ViewModel基本用法示例详解

 更新时间:2025年11月20日 10:10:25   作者:来来走走  
文章介绍了Android开发中ViewModel的基本用法,通过ViewModel实现一个计数器功能,并在Activity中使用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运动健康睡眠自定义控件的实现

    Android运动健康睡眠自定义控件的实现

    这篇文章主要介绍了Android实现运动健康睡眠自定义控件的方法,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-03-03
  • Android开发实现的导出数据库到Excel表格功能【附源码下载】

    Android开发实现的导出数据库到Excel表格功能【附源码下载】

    这篇文章主要介绍了Android开发实现的导出数据库到Excel表格功能,涉及Android数据库及Excel表格相关操作技巧,并附带完整源码供读者下载参考,需要的朋友可以参考下
    2018-03-03
  • Android利用SurfaceView实现下雨的天气动画效果

    Android利用SurfaceView实现下雨的天气动画效果

    这篇文章主要介绍了Android利用SurfaceView实现下雨天气效果的相关资料,文中详细介绍 SurfaceView 和 View 的区别,以及一些需要使用到 SurfaceView 的场景。需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Flutter实现给图片添加涂鸦功能

    Flutter实现给图片添加涂鸦功能

    这篇文章主要介绍了利用Flutter实现给图片添加涂鸦功能,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • Android普通对话框用法实例分析

    Android普通对话框用法实例分析

    这篇文章主要介绍了Android普通对话框用法,以实例形式较为详细的分析了Android对话框的创建技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Android开发之滑动数值选择器NumberPicker用法示例

    Android开发之滑动数值选择器NumberPicker用法示例

    这篇文章主要介绍了Android开发之滑动数值选择器NumberPicker用法,结合实例形式分析了Android滑动数值选择器NumberPicker的功能、相关函数、事件监听、界面布局等操作技巧,需要的朋友可以参考下
    2019-03-03
  • Android编程实现开机自动运行的方法

    Android编程实现开机自动运行的方法

    这篇文章主要介绍了Android编程实现开机自动运行的方法,分析了Android开机运行的原理并结合实例形式给出了Android基于广播实现开机运行的技巧,需要的朋友可以参考下
    2016-10-10
  • Android 动态菜单实现实例代码

    Android 动态菜单实现实例代码

    这篇文章主要介绍了Android 动态菜单实现实例代码的相关资料,这里附有实例代码及实现效果图,需要的朋友可以参考下
    2017-01-01
  • Android开发之ImageSwitcher相册功能实例分析

    Android开发之ImageSwitcher相册功能实例分析

    这篇文章主要介绍了Android开发之ImageSwitcher相册功能,结合实例形式分析了Android ImageSwitcher相册的原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-03-03
  • Android编程实现泡泡聊天界面实例详解(附源码)

    Android编程实现泡泡聊天界面实例详解(附源码)

    这篇文章主要介绍了Android编程实现泡泡聊天界面,结合实例形式较为详细的分析了Android泡泡聊天界面的窗体定义与功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11

最新评论