Android(安卓)LiveData 使用
16lz
2021-01-25
LiveData是一个可观察的数据持有类,自动处理生命周期,防止内存泄漏,同步数据更新。
MutableLiveData:观察对象变化
Transformations.map和Transformations.switchMap:间接观察对象,map观察普通对象,switchMap观察LiveData的子类
例子
class MainActivity : AppCompatActivity() { //创建LiveData private val operation = MutableLiveData() //创建num的LiveData private val num = Transformations.map(operation) { //operation对象改变,修改num.setValue(operation.num) it.num } //创建result的LiveData private val result = Transformations.switchMap(operation) { //operation对象改变,添加operation.result.observe{result.setValue(it)} it.result } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) operation.observe(this, Observer { //operation对象发生变化时调用 textView1.text = it?.num?.toString() }) num.observe(this, Observer { //num对象发生变化时调用 textView2.text = it?.toString() }) result.observe(this, Observer { //result对象发生变化时调用 textView3.text = it?.toString() }) button1.setOnClickListener { //修改operation,主线程使用setValue,子线程使用postValue operation.setValue(Operation((operation.value?.num ?: 0) + 1)) } button2.setOnClickListener { //计算 operation.value?.mul() } }}
class Operation(val num: Int) { val result = MutableLiveData() fun mul() { //乘法计算 result.value = (num * num) }}
<?xml version="1.0" encoding="utf-8"?>
逻辑图
给LiveData添加观察者,使用setValue()方法修改数据,Observer会接受到回调
使用Transformations的map和switchMap方法,实现间接观察对象
更多相关文章
- Android中的Parcelable序列化对象
- ListView一些相关知识
- Android(安卓)service启动流程分析.
- Android之基本组件
- Android(安卓)IPC 通讯机制源码分析
- 线程间通信----Handler
- Android(安卓)代理拦截系统层代码
- Android开发之《Android应用开发揭秘》UI事件汇总
- Android:Activity生命周期