有时候有这样的需求,需要在LiveData将变化的数据通知给观察者前,改变数据的类型;或者是返回一个不一样的LiveData。
这里介绍一个类Transformations
,它可以帮助完成上面的这些操作。
Transformations.map()
//todo LiveData创建方法1
val liveData: MutableLiveData<NeiHanResult> = neiHanRepository.liveData
//todo LiveData创建方法2
val liveData2 = Transformations.map(neiHanRepository.liveData) { it }!!
Transformations.map()使用
要修改后的数据对象
val liveDataTemp = MutableLiveData<List<NeiHanResult2>>()
//定义一个临时list存储对象
var listData = mutableListOf<NeiHanResult2>()
//todo LiveData创建方法3 并修改数据
val liveData3 = Transformations.map(neiHanRepository.liveData) {
it.result.forEach { item ->
val formattedTime = item.text + "66666"
listData.add(NeiHanResult2(formattedTime, item.text))
LogUtils.d(item.text)
}
//执行数据修改后 给新数据赋值
liveDataTemp.value = listData
}
//执行数据修改的方法
neiHanViewModel.liveData3.observe(this, Observer {})
//监听所需修改后数据
neiHanViewModel.liveDataTemp.observe(this, Observer<List<NeiHanResult2>> {
var text = ""
it.forEach {
text += "${it.name}:${it.text}\n"
text_contact.text = text
}
})