Kotlin: Jetpack — LiveData简单应用

LiveData 概览 Android Jetpack 的一部分。

LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 activity、fragment 或 service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。

API:LiveData 概览 | Android 开发者 | Android Developers

代码:

Kotlin 复制代码
class MainActivity : AppCompatActivity() {

    // 观察数据 当数据发生改变时 更新数据

    //声明liveData 数据感知 MutableLiveData<T> extends LiveData<T>
    val mliveData=MutableLiveData<String>()

    val liveMapData:LiveData<Pair<Int,String>> = mliveData.map {
        //hashCode 哈希码
        Pair<Int,String> (it.hashCode(),it)
    }

    val liveMapData2:LiveData<String> = mliveData.map {
        //最后6个字符
        "liveMapData2 ${it.takeLast(6)}"
    }


    //声明liveData 数据感知  默认值
    val liveTwo = MutableLiveData<String>().apply {
        value = "666"
    }
    val liveOne = MutableLiveData<String>().apply {
        value = "888"
    }
    //switchMap 通过条件,控制选择数据源666 or 888
    val switchLiveData:LiveData<String> = liveMapData.switchMap {
        if (it.second.takeLast(1).toInt() % 2 == 0) liveTwo else liveOne
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)

        //获取到xml主布局中的所有的view 用了DataBinding
//        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        //ViewDataBinding
        val binding:ActivityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)
 // Create the observer which updates the UI.
        val nameObserver = Observer<String> { newName ->
            // Update the UI, in this case, a TextView.
            Log.i("TAG","----触发了察者---")
            binding.tvcont.text = newName
        }
        // Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
        model.currentName.observe(this, nameObserver)

        //按钮点击事件 模拟数据发生改变    更新 LiveData 对象
        binding.btnUpdate.setOnClickListener{
            val anotherName = "John Doe"
            //更改数据
            model.currentName.setValue(anotherName)


            //更改数据
            mliveData.value = System.currentTimeMillis().toString()

        }

        /**java 代码
         * myViewModel.getData().observe(this, new Observer<Integer>() {
            @Override
             public void onChanged(Integer integer) {
             //内容发生改变
            textView.setText (String.valueOf(integer));
            }
            });
         */
        //观察mliveData 数据发生改变时 把数据显示在text中
        mliveData.observe(this,Observer{
            Log.i("TAG","--mliveData--触发了观察  数据发生了改变---$it")
            binding.tv6.text = it
        })

        //观察 liveMapData map转换后的数据
        liveMapData.observe(this, Observer {
            Log.i("TAG","--liveMapData map转换后的数据--触发了观察  数据发生了改变---$it")
            binding.tv7.text = it.toString()
        })

        //观察liveMapData2    数据发生改变时 把数据显示在text中
        liveMapData2.observe(this, Observer {
            Log.i("TAG","--liveMapData map转换后的数据--触发了观察  数据发生了改变---$it")
            binding.tv8.text = it.toString()
        })

        //观察switchLiveData  数据发生改变时 把数据显示在text中
        switchLiveData.observe(this, Observer {
            Log.i("TAG","--switchLiveData--触发了观察  数据发生了改变---$it")
            binding.tv9.text = it
        })

    }
}
相关推荐
小小筱筱6 小时前
LabVIEW笔记:解决周立功CAN卡驱动缺失导致的启动报错问题
笔记·labview
WAsbry7 小时前
协程任务的失败控制:取消、异常传播与Supervisor
android
Wang's Blog7 小时前
PostgreSQL笔记4: 市场地位、生态全景与行业应用实践
数据库·笔记·postgresql
Android打工仔7 小时前
从 finally 理解程序的控制流:它为什么不是 catch 后面的代码?
android·kotlin
随遇丿而安7 小时前
第15周:Service 全功能 + 后台优化
android
YXL1111YXL7 小时前
续体和状态机 —— suspend 函数的 CPS 变换
android·kotlin
WAsbry7 小时前
Flow数据模型:冷流、状态、事件与共享策略
android
WAsbry7 小时前
深入理解 Kotlin suspend:挂起语义、状态机与恢复调度
android
WAsbry7 小时前
Flow在Android中的完整落地:异常、重试与生命周期
android
RainCity7 小时前
Java Swing 自定义组件库分享(十六)
java·笔记·后端