docs显示如何在Transformations
对象上执行LiveData
?如何在map()
对象上执行类似switchMap()
和MutableLiveData
的转换?
MutableLiveData只是LiveData的子类。任何接受LiveData的API也将接受MutableLiveData,并且仍然会按照您期望的方式运行。
完全相同的方式:
fun viewModelFun() = Transformations.map(mutableLiveData) {
//do somethinf with it
}
也许您的问题是您不知道您可变的实时数据如何适合于此。在最近的更新中,可变实时数据可以以默认值开头
private val form = MutableLiveData(Form.emptyForm())
这将在附加观察者后立即触发转换,因为它将有一个要分派的值。
也许您需要在附加观察者后触发它
fun viewModelFun(selection: String) = liveData {
mutableLiveData.value = selection.toUpperCase
val source = Transformations.map(mutableLiveData) {
//do somethinf with it
}
emitSource(source)
}
并且如果您希望切换映射通常是这样的:
private val name = MutableLiveData<String>()
fun observeNames() = Transformations.switchMap(name) {
dbLiveData.search(name) //a list with the names
}
fun queryName(likeName: String) {
name.value = likeName
}
并且在视图中,您将侦听器设置为搜索的编辑文本
searchEt.doAfterTextChange {...
viewModel.queryName(text)
}