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

    }
}
相关推荐
服装学院的IT男1 小时前
【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2
android
Arms2061 小时前
android 全面屏最底部栏沉浸式
android
服装学院的IT男1 小时前
【Android 源码分析】Activity生命周期之onStop-1
android
人间有清欢4 小时前
十、kotlin的协程
kotlin
吾爱星辰4 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer4 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
网络研究院6 小时前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
凉亭下6 小时前
android navigation 用法详细使用
android
m0_689618287 小时前
水凝胶发生器,不对称设计妙,医电应用前景广
笔记
Ace'7 小时前
每日一题&&学习笔记
笔记·学习