我想观察ViewModel中的实时数据更改,并想更改另一个实时数据,所以我正在使用Mediatorlivedata,我不知道如何在ViewModel中观察它,我遇到了编译时错误
类型不匹配。要求:找到观察员:
class CheckmeasureViewModel(private val repository: UserRepository) : ViewModel() {
var estimateFinancialyear: ArrayList<FinYear> = ArrayList()
var asset = arrayListOf("Select")
var estimate = arrayListOf("Select")
var appPref: AppPref
var estimateyearpos = MutableLiveData<Int>()
var mediatorLiveData: MediatorLiveData<Int> = MediatorLiveData()
init {
appPref = AppPref.getInstance()!!
estimateFinancialyear.add(FinYear(0, "Select"))
estimateFinancialyear.addAll(repository.getFinYears())
estimateyearpos.observeForever(object : Observer<in Int> {
fun onChanged(@Nullable integer: Int?) { //Do something with "integer"
}
})
}
}
最佳答案
您不应该在viewModel上观察实时数据,尝试将其作为源添加到mediatorLiveData并直接在 View 上观察:
val mediatorLiveData: MediatorLiveData<Int> = MediatorLiveData().apply{
addSource(estimateyearpos) { /*Do something with "integer" */}
}
甚至(如果您不需要使其可变)
val liveData = Transformations.map(estimateyearpos) { /*Do something with "integer" */}
这两个选项都将观察源实时数据并对其应用给定功能,但是您仍然需要在Activity或片段上对其进行观察以正确获取值。
关于android - 类型不匹配。必需:观察员<in int!>找到:?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60373698/