ViewModel快速上手1-原生kotlin
ViewModel 原生支持 kotlin 案例
基本案例
viewmodel 是为了保存当当前 activity 切出或者销毁时,如何保存数据,以便下一次创建新的 activity 时进行调用
首先引入 lifecycle 依赖
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
之后,编写一个类继承 viewmodel,在这里配置数据的存取
我们需要实现:activity 调用该 vm,设置需要获取的水果序号,然后按照序号取出水果
代码清单 QuizViewModel.kt
package com.zhiyiyi.listviewdemo.modelimport android.util.Log
import androidx.lifecycle.ViewModelclass QuizViewModel : ViewModel() {// 初始化代码块,用于提示当前vm被调用init {Log.d("vm", "启动" + this.javaClass)}// 当当前的vm被销毁之前需要执行的方法override fun onCleared() {super.onCleared()}// 当前被选中的水果序号var currentIndex = 0// 简写get方法,获取指定序号的水果名称val getFruit: String get() = fruit[currentIndex]// 在这里存储水果数据private val fruit = listOf("apple", "pineapple", "pear", "orange", "banana")
}
viewmodel 全局仅存在一个实例,故配合懒加载,可以使用 val 定义 viewmodel 常量而非使用 var
故这里使用 by lazy 函数进行懒加载操作
因版本迭代,原 ViewModelProviders.of(this) 方法已被废弃,请使用以下代码中规定的新方法
代码清单 MainActivity.kt
package com.zhiyiyi.listviewdemoimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import com.zhiyiyi.listviewdemo.model.QuizViewModel
import kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompatActivity() {private val quizVM: QuizViewModel by lazy {ViewModelProvider(this).get(QuizViewModel::class.java)}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val quizVM = ViewModelProvider(this).get(QuizViewModel::class.java)btn_submit.setOnClickListener {val index = et_username.text.toString().toInt()quizVM.currentIndex = indexet_username.setText(quizVM.getFruit)}}
}
bundle 存储
当按下返回键并退出 activity 的时候,实际上该 activity 已经被销毁了; 然而直接点击主屏幕按键,只会挂起该 activity,并不会销毁它
oncreate 函数中的 savedInstanceState: Bundle? 参数还记得吗?
其中的 bundle 可看做是一个全局数据库,当 activity 被销毁后他会依然存在
利用此特性我们可以进行数据的恢复操作
因 activity 被销毁后,会调用 onSaveInstanceState 方法,而我们恰好可以为该方法传入值并存储他,当下一次 activity 被创建的时候,就可以直接取出我们存储的值
重写 onSaveInstanceState 方法,在 activity 被销毁前存储变量
override fun onSaveInstanceState(outState: Bundle) {super.onSaveInstanceState(outState)outState.putInt("index", quizVM.currentIndex)Log.d("vm", quizVM.currentIndex.toString())
}
在 oncreate 方法中直接从 bundle 中取出值
override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val quizVM = ViewModelProvider(this).get(QuizViewModel::class.java)// 从bundle中取出值val currentIndex = savedInstanceState?.getInt("index", 0) ?: 0quizVM.currentIndex = currentIndexet_username.setText(currentIndex.toString())...
}
相关文章:
ViewModel快速上手1-原生kotlin
ViewModel 原生支持 kotlin 案例 基本案例 viewmodel 是为了保存当当前 activity 切出或者销毁时,如何保存数据,以便下一次创建新的 activity 时进行调用 首先引入 lifecycle 依赖 implementation androidx.lifecycle:lifecycle-extensions:2.2.0 之后…...
Flutter(一)介绍、Dart语言简介
Flutter介绍 纯原生开发主要面临动态化更新和开发成本两个问题,而针对这两个问题,诞生了一些跨平台的动态化框架 跨平台技术简介 Flutter 是 Google 推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开…...
【数据结构】---顺序表的实现
最近学校开始学习数据结构了,没事就手搓一个顺序表。🌈线性表线性表是n个具有相同特性的数据元素的有限序列,是一种实际中广泛使用的数据结构,常见的线性表有顺序表、链表、栈、队列、字符串。线性表在逻辑上是线性结构࿰…...
JavaScript刷LeetCode拿offer-经典高频40题vaScript刷LeetCode拿offer-经典高频40题
工作太忙没有时间刷算法题,面试的时候好心虚。这里双手奉上40道LeetCode上经典面试算法题,整理的内容有点长,建议先收藏,慢慢消化,在来年顺利拿到满意的offer。 1、[LeetCode] 两数之和 给定一个整数数组和一个目标值…...
动态规划,这将是你见过最详细的讲解
文章目录一、为什么要讲动态规划呢?二、什么是动态规划三、感受一下递归算法、备忘录算法、动态规划递归算法带备忘录的递归解法(自定向下)自底向上的动态规划四、动态规划的解题套路1. 穷举分析2. 确定边界3. 确定最优子结构4. 写出状态转移…...
【服务器数据恢复】FreeNAS层UFS2文件系统数据恢复案例
服务器数据恢复环境: Dell存储服务器,采用esxi虚拟化系统,esxi虚拟化系统里有3台虚拟机;上层iSCSI使用FreeNAS构建,通过iSCSI方式实现FCSAN功能;FreeNAS层采用UFS2文件系统。 esxi虚拟化系统里有3台虚拟机中…...
Zookeeper安装和基本使用
目录标题一、下载二、安装三、启动客户端测试四、使用zk一、下载 注意:自zk3.5.5版本以后,已编译的jar包,尾部有bin,应该使用的是apache-zookeeper-3.8.0-bin.tar.gz。,因此在下载高版本时,因该下载后缀带b…...
字节面试惨败,闭关修炼再战美团(Android 面经~)
作者:王旭 前言 本人从事Android 开发已经有5年了,受末日寒气影响,被迫在家休整,事后第一家选择字节跳动面试,无奈的被面试官虐得“体无完肤”,好在自己并未气馁,于是回家开始回家进行闭关修炼…...
【机器学习实战】七、梯度下降
梯度下降 一、线性回归 线性回归算法推导过程可以基于最小二乘法直接求解,但这并不是机器学习的思想,由此引入了梯度下降方法。本文讲解其中每一步流程与实验对比分析。 1.初始化 import numpy as np import os %matplotlib inline import matplotli…...
什么是极速文件传输,极速文件传输如何进行大文件传输
当谈到大文件传输时,人们总是担心大数据文件的大小以及将它们从一个位置交换到另一个位置需要多长时间。由于数据捕获高分辨率视频和图像的日益复杂,文件的大小不断增加。数据工作流在地理上变得越来越分散。在一个位置生成的文件在其他位置处理或使用。…...
Spring Boot 日志
目录 1.概述 2.切换日志实现 3.使用 3.1.日志级别 3.3.日志离线 3.4.详细定制 1.概述 由一些历史原因,JAVA领域存在有很多日志框架,如Log4j、Logback、log4j2。 log4j是Java日志框架的元老,在log4j被Apache Foundation收入门下之后&a…...
好用的研发管理看板工具有哪些?10款主流看板管理软件盘点
10大企业看板工具软件:1.软件开发项目看板 PingCode;2.通用看板软件 Worktile;3.开源看板软件 Wekan;4.免费看板软件 Trello;5.个人和小团队的看板软件 Todoist ;6.开源免费看 Kanboard;7.面向个…...
【软考系统架构设计师】2022下案例分析历年真题
【软考系统架构设计师】2022下案例分析历年真题 【软考系统架构设计师】2022下案例分析历年真题【软考系统架构设计师】2022下案例分析历年真题2022下案例分析历年真题第一题(25分)2022下案例分析历年真题第二题(25分)2022下案例分…...
Java skill - @JsonAlias 和 @JsonProperty
Java skill - JsonAlias 和 JsonPropertyJava skill系列目录:JsonAlias 和 JsonProperty使用 JsonProperty 的麻烦场景:使用 JsonAlias 应对麻烦场景:Java skill系列目录: 【Java skill - 统计耗时用StopWatch】 【Java skill - …...
【实际开发18】- 静态 3
目录 1. 调试与评估 2. 单元测试的管理 1. 单元测试的文档 3. 系统集成的模式与方法 1. 集成测试前的准备 2. 集成测试的模式 3. 大棒集成方法 ( Big-bang Integration) 4. 自顶向下和自底向上集成方法 1. 自顶向下法 ( Top-down Integration ) 2. 自底向上法 ( Bott…...
【swagger2】开发api文档
文章目录一、swagger2 简介背景Open API ???swagger2的作用swagger2常用工具组件:二、Springfox三、springBoot使用swagger2(简单示例)四、Swagger-UI使用五、配置文件1、配置类:给docket上下文配置api描述信息2、配置类&#…...
Github 上如何提交 pull request
什么是复刻(forking)? 我们可以通过复刻操作将喜爱的仓库保存自己的Github账户中,以便独立地对其进行操作。 通过复刻,我们可以得到包含完整版本历史的目标仓库的实例,之后可以对复刻得到的仓库进行任意操作而不会影响…...
Redis面试知识
概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能…...
Spring面试重点(四)——Spring事务
Spring事务 事务的方式 spring中使用事务有两种方式,一种是编程式事务,一种是声明式事务。编程式事务推荐使用TransactionTemplate,实现TransactionCallback接口,需要编码实现;声明式事务只需要在函数增加注解Transa…...
♡ — MySQL 存储引擎
MySQL 存储引擎架构 MySQL 存储引擎采用的是插件式架构,支持多种存储引擎,我们甚至可以为不同的数据库设置不同的存储引擎以适应不同场景的需要;存储引擎是基于表的,而不是数据库。 MyISAM 和 InnoDB 的区别 MySQL 5.5 之前&am…...
Langflow场景化部署指南:为不同用户定制的安装方案
Langflow场景化部署指南:为不同用户定制的安装方案 【免费下载链接】langflow ⛓️ Langflow 是 LangChain 的用户界面,使用 react-flow 设计,旨在提供一种轻松实验和原型设计流程的方式。 项目地址: https://gitcode.com/GitHub_Trending/…...
别再让PB级大表拖垮你的GaussDB集群了!手把手教你6个实战优化技巧
别再让PB级大表拖垮你的GaussDB集群了!手把手教你6个实战优化技巧 凌晨3点,监控告警突然响起——某个周期性跑数任务已经卡在"执行中"状态超过6小时。你打开集群监控面板,发现CPU使用率飙升至95%,内存占用触达红线&…...
Unity3D毕业设计新手入门:从零构建可交付的2D游戏项目
最近在帮学弟学妹们看Unity毕业设计项目,发现一个挺普遍的现象:很多同学虽然能实现各种炫酷的功能,但项目内部却像一锅“意大利面”——脚本相互引用、资源乱放、场景一打开就卡顿,答辩演示时还容易出各种意外。这其实不是技术问题…...
sguard_limit:智能优化游戏体验的系统资源管理工具
sguard_limit:智能优化游戏体验的系统资源管理工具 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 1. 性能瓶颈解析 1.1 游戏玩家的共同困扰…...
亮点抢先看!“宁智毋庸,创领未来”——2026 全球开发者先锋大会剧透来袭
如今,前沿AI技术已悄然渗透进日常生活——从简单的交互提问到OpenClaw等智能体的复杂应用,从生成视频到AIGC制作电影级短剧,技术进化肉眼可见,SE(超级创业者)、OPC(一人公司)随之崛起…...
惊艳效果展示:实时手机检测-通用镜像识别复杂场景手机案例
惊艳效果展示:实时手机检测-通用镜像识别复杂场景手机案例 1. 开箱即用的手机检测神器 想象一下这样的场景:你需要快速检测一张照片中有多少部手机,可能是为了分析会议记录、监控考场纪律,或者统计零售店铺的顾客行为。传统方法…...
云边端一体化核心技术:数据同步与边缘智能实现
云边端一体化核心技术:数据同步与边缘智能实现📚 本章学习目标:深入理解数据同步与边缘智能实现的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《云原生、云边端一体化与算力基建&#…...
Qwen3-4B内存优化技巧:如何让4B模型跑得更快更稳
Qwen3-4B内存优化技巧:如何让4B模型跑得更快更稳 1. 为什么需要优化Qwen3-4B的内存使用? 运行大型语言模型时,内存管理往往是决定性能的关键因素。对于Qwen3-4B这样的4B参数模型,未经优化的内存使用可能导致: 推理速…...
香橙派安卓镜像烧录全攻略:从PhoenixCard配置到蓝牙功能实测
香橙派安卓镜像烧录全攻略:从PhoenixCard配置到蓝牙功能实测 在智能硬件开发领域,香橙派以其出色的性价比和丰富的功能接口,成为众多开发者和爱好者的首选平台。而将安卓系统成功部署到香橙派上,则是开启其全部潜力的关键第一步。…...
龙芯3A6000实测:12nm国产CPU如何用2.5GHz主频战平i3-10100F?
龙芯3A6000架构解析:12nm工艺下的性能突围之道 当国产处理器龙芯3A6000以2.5GHz主频实现与Intel酷睿i3-10100F同频性能时,整个芯片行业都在追问:在制程工艺落后两代的情况下,中国自主CPU如何完成这场"以小搏大"的技术逆…...
