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

    }
}
相关推荐
独行soc29 分钟前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码20351 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_915106321 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
JustDI-CM1 小时前
AI学习笔记-提示词工程
人工智能·笔记·学习
爱写bug的野原新之助1 小时前
加密摘要算法MD5、SHA、HMAC:学习笔记
笔记·学习
vistaup1 小时前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
常利兵1 小时前
ButterKnife在Android 35 + Gradle 8.+环境下的适配困境与现代化迁移指南
android
撩得Android一次心动1 小时前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
熊猫钓鱼>_>2 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
小乔的编程内容分享站2 小时前
C语言笔记之函数
c语言·笔记