我如何在MutableLiveData上执行转换?

问题描述 投票:0回答:2

docs显示如何在Transformations对象上执行LiveData?如何在map()对象上执行类似switchMap()MutableLiveData的转换?

android android-livedata mutablelivedata
2个回答
0
投票

MutableLiveData只是LiveData的子类。任何接受LiveData的API也将接受MutableLiveData,并且仍然会按照您期望的方式运行。


0
投票

完全相同的方式:

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.