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