Android 未针对某个特定场景观察到LiveData

Android 未针对某个特定场景观察到LiveData,android,android-fragments,kotlin,android-livedata,android-livedata-transformations,Android,Android Fragments,Kotlin,Android Livedata,Android Livedata Transformations,我的ViewModel中有3个LiveData对象,我正在对这些对象应用转换,问题是有2个LiveData被观察到,而另一个没有,我尝试了不同的解决方案,例如更改ViewModel的初始化方式或LiveData的初始化方式,但没有任何效果 class MyClass : ViewModel() { init { _originallist.value = Instance.getOrignalList() } // observed in Fragme

我的ViewModel中有3个LiveData对象,我正在对这些对象应用转换,问题是有2个LiveData被观察到,而另一个没有,我尝试了不同的解决方案,例如更改ViewModel的初始化方式或LiveData的初始化方式,但没有任何效果

class MyClass : ViewModel() {

    init {
        _originallist.value = Instance.getOrignalList()
    }
     // observed in Fragment A
    val a: LiveData<List<A>> = Transformations.map(_searchText, ::extractA)
     // observed in Fragment B
    val b: LiveData<List<B>> = Transformations.map(_originallist, ::extractB)
     // observed in Fragment C
    val c: LiveData<List<C>> = Transformations.map(_originalList, ::extractC)

     // Called from Fragment D to change the _searchText liveData
    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
    }
}
classmyclass:ViewModel(){
初始化{
_originallist.value=Instance.getOrignalList()
}
//在片段A中观察到
val a:LiveData=Transformations.map(_searchText,::extractA)
//在片段B中观察到
valb:LiveData=Transformations.map(_originallist,::extractB)
//在片段C中观察到
val c:LiveData=Transformations.map(_originalList,::extractC)
//从片段D调用以更改_searchTextlivedata
fun setSearchText(文本:字符串){
_searchText.value=text
}
有趣的摘录(文本:字符串):列表{
val temp=ArrayList()
list.foreach{
如果(它)包含(文本,错误)临时添加(它)
}
返回温度
}
乐趣摘录B(列表:列表):列表{
//做点什么
}
乐趣摘录(列表:列表):列表{
//做点什么
}
}
如果您注意到LiveData b和c只初始化了一次,因此我可以在我的RecyclerView中看到数据,但是对于LiveData A,搜索文本可以根据用户输入进行更改,这就是我的片段没有观察到这些实时数据的地方。 注意事项:这是我的3个viewPager片段的常见ViewModel,在一个片段中观察到LiveData a,在另一个片段中观察到B,在另一个片段中观察到C。 最后,我还需要搜索其他2个片段。 当我调试片段中的观察者行时,我想指出的另一件事是,所有3个片段中的代码都是相同的,只是它们观察的是不同的LiveData

编辑:我现在注意到的是,由于我从片段D调用setSearchText(),我能够在片段D中观察到LiveData A的变化,但我想在片段A中观察到,但不能。 我在片段D中有一个搜索栏,底部有一个带有3个片段的视图寻呼机,所有4个片段都有一个共同的视图模型,我在这里做错了什么,还是这不是实现这个的方法? TIA问题是:

您的函数
extractA
in

val a: LiveData<List<A>> = Transformations.map(_searchText, ::extractA)
val a:LiveData=Transformations.map(\u searchText,::extractA)
仅当
\u searchText
的值更改时才会执行


这就是
转换的工作原理,每当值发生变化时,它们都会应用给定的函数。

最终找到了根本原因,问题是
viewModel
在每个片段中都有自己的生命周期所有者,解决方法是在父ac中声明并初始化
viewModel
对象片段的活动性,并在片段中使用其instance来观察
LiveData

我正在通过从片段调用setText来更改该值