【LifeData】学习笔记
程序员文章站
2022-06-08 16:19:20
...
一.学习视频来源:
- https://www.bilibili.com/video/BV1sJ41127EMlongway777
- 模型图来源也全截取来自该Up的视频
二. 建立样例
1. 准备
- 上一个ViewModel中,每次更新ViewModel的number属性,都要再次手动设置界面更新
- res可使用Vector Assert矢量图标
2.核心代码
- 首先创建一个类继承ViewModel,最新版创建ViewModel会自动部署了ViewModel所需的依赖
1)创建LiveData 容器
2)创建私有属性_number,公有属性number,公有方法进行相互转换【非常好用】
class ViewModelWithLiveData : ViewModel() {
//创建LiveData容器
private val _number=MutableLiveData<Int>(0).also {
it.value=0//使用also初始化
}
val number: LiveData<Int>
get()=_number//get()可省略 内部获取,不开放
fun modifyNumber(aNumber:Int){
_number.value=_number.value?.plus(aNumber)
}//下划线规约内部只读
}
- 来到MAC
1)原创建ViewModel对象比较复杂
2) 使用依赖组件,这个要求JVM1.8,来到添加依赖的gradle,使用这种方式声明就简单许多
implementation ‘androidx.fragment:fragment-ktx:1.2.2’
原方式:val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
改版后更符合kotlin的习惯
改版:val myviewModel:ViewModelWithLiveData by viewModels<ViewModelWithLiveData>()
- 剩下的和之前ViewModel测试差不多
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val myviewModel:ViewModelWithLiveData by viewModels<ViewModelWithLiveData>()
//建立livedata观察
myviewModel.number.observe(this, Observer {
TextView.text=it.toString()
})
imageButton.setOnClickListener{
myviewModel.modifyNumber(1)
//这边赋值完之后viewmodel做了LiveData的监听会自动保存,就不用再写设置了
}
imageButton2.setOnClickListener{
myviewModel.modifyNumber(-1)
}
}
}
三.完成LifeData后,若系统设置了不允许后台运行(挂起但没销毁),这里就需要写savedstate保存状态
class ViewModelWithLiveData(private val savedStateHandle: SavedStateHandle) : ViewModel() {
//创建LiveData容器
private val _number=MutableLiveData<Int>(0).also {
if(!savedStateHandle.contains("number")){
savedStateHandle.set("number",0)
}
it.value=0//使用also初始化
}
val number: LiveData<Int>
get()=_number//get()可省略 内部获取,不开放
fun modifyNumber(aNumber:Int){
_number.value=_number.value?.plus(aNumber)
savedStateHandle.set("number",_number.value)
}//下划线规约内部只读
}
上一篇: 鸡肋的PHP单例模式应用详解
下一篇: 致PHP途中的“年轻人”
推荐阅读
-
公司要使用php作一些开发,开始学习php
-
photoshop学习视频 php学习 字符串课件
-
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史_javascript技巧
-
黑莓passport discuz Passport 通行证 整合笔记
-
PHP面向对象的进阶学习(抽像类、接口、final、类常量)_php技巧
-
请问织梦dede可以较好的生成网站,那还需要学习php, html吗?
-
小蚂蚁学习PHP性能优化(2)PHP语言级性能优化
-
LotusPhp笔记之:Cookie组件的使用详解
-
Twig 的 tags学习(中文) 之三 完结_PHP教程
-
php入门学习知识点七 PHP函数的基本应用