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

    }
}
相关推荐
zzh0811 小时前
MySQL高可用集群笔记
数据库·笔记·mysql
绛橘色的日落(。・∀・)ノ2 小时前
Matplotlib实践学习笔记
笔记·学习
chase。2 小时前
【学习笔记】AGILE:把人形机器人强化学习从“玄学”变成“工程学”
笔记·学习·敏捷流程
久菜盒子工作室2 小时前
高等教育学|第一章高等教育概述
经验分享·笔记·课程设计
tq10863 小时前
语言流形与思维共生:中西认知图景的差异与交融
笔记
YuanDaima20483 小时前
基于 LangChain 1.0 的检索增强生成(RAG)实战
人工智能·笔记·python·langchain·个人开发·langgraph
_李小白3 小时前
【OSG学习笔记】Day 31: 渲染到纹理(RTT)
笔记·数码相机·学习
练习时长一年5 小时前
我的开发笔记
笔记
生瓜硬劈..6 小时前
SQL 调优全解:从 20 s 到 200 ms 的 6 步实战笔记
java·笔记·sql
不早睡不改名@6 小时前
Netty源码分析---Reactor线程模型深度解析(一)
java·笔记·学习·netty