Android LiveData 使用

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)
    }

}



    

    

    

    

逻辑图

给LiveData添加观察者,使用setValue()方法修改数据,Observer会接受到回调 

Android LiveData 使用_第1张图片

使用Transformations的map和switchMap方法,实现间接观察对象

Android LiveData 使用_第2张图片

 

 

你可能感兴趣的:(android,kotlin)