我的ViewModel中有3个LiveData对象,我正在对其进行转换,问题是观察到2个LiveData而没有观察到,我尝试了不同的解决方案,例如更改ViewModel的初始化方式或方法LiveData已初始化,但没有任何帮助。
class MyClass : ViewModel() {
init {
_originallist.value = Instance.getOrignalList()
}
val a: LiveData<List<A>> = Transformations.map(_searchText, ::extractA)
val b: LiveData<List<B>> = Transformations.map(_originallist, ::extractB)
val c: LiveData<List<C>> = Transformations.map(_originalList, ::extractC)
fun setSearchText(text: String) {
_searchText.value = text
}
fun extractA(text: String): List<A> {
val temp = ArrayList<A>()
list.foreach {
if (it.contains(text, false) temp . add (it)
}
return temp
}
fun extractB(list: List<B>): List<B> {
// do something
}
fun extractC(list: List<C>): List<C> {
// do something
}
}
如果您注意到LiveData b和c仅被初始化一次,因此我可以在RecyclerView中看到数据,但是对于LiveData A,搜索文本可以根据用户输入进行更改,这是我片段未观察到此实时数据。注意事项:这是我3个viewPager片段的常见ViewModel,在一个片段中观察到LiveData a,在另一个片段中观察到B,在另一个片段中观察到C。最终,我还必须对其他2个片段进行搜索。当我调试片段中的观察者行被跳过时,我想指出的另一件事是,所有三个片段中的代码都是相同的,只是它们观察的是不同的LiveDataTIA
问题是:
您的功能extractA
in
val a: LiveData<List<A>> = Transformations.map(_searchText, ::extractA)
仅在_searchText
的值改变时才执行。
这就是Transformations
的工作方式,只要值更改,它们就会应用给定的函数。