当前位置: 代码网 > it编程>App开发>Android > Android开发(Kotlin) ViewModel基本用法示例详解

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

2025年11月20日 Android 我要评论
viewmodel基本用法创建viewmodelclass myviewmodel: viewmodel() {}实现一个计数器class myviewmodel : 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用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com