Android 带有LiveData的嵌套观察者(观察观察者)

Android 带有LiveData的嵌套观察者(观察观察者),android,android-fragments,android-architecture-components,Android,Android Fragments,Android Architecture Components,我有一个例子,在BottomNavigationView中显示/隐藏片段,而不是添加/替换,因此它们不会每次都经历生命周期 片段1正在观察一个数据库表,片段2正在观察另一个数据库表 我的目标是在调用片段1的onChanged时调用片段2的onChanged 一个愚蠢而天真的解决方案是在片段2中设置片段1的观察者,并在其中调用另一个观察者: mFragment1ViewModel1.getData().observe(this, new Observer<Fragment1Data>(

我有一个例子,在BottomNavigationView中显示/隐藏片段,而不是添加/替换,因此它们不会每次都经历生命周期

片段1正在观察一个数据库表,片段2正在观察另一个数据库表

我的目标是在调用片段1的onChanged时调用片段2的onChanged

一个愚蠢而天真的解决方案是在片段2中设置片段1的观察者,并在其中调用另一个观察者:

mFragment1ViewModel1.getData().observe(this, new Observer<Fragment1Data>() {
    @Override
    public void onChanged(Fragment1Data fragment1Data) {
        if(fragment1Data != null){
            mFragmentViewModel2.getData().observe(SomeClass.this, new Observer<Fragment2Data>() {
                @Override
                public void onChanged(@Nullable Fragment2Data fragment2Data) {
                    // Do some stuff...
                }
            });
        }
    }
});
MFFragment1ViewModel1.getData().observe(这是新的观察者(){
@凌驾
更改后的公共无效(Fragment1Data Fragment1Data){
if(fragment1Data!=null){
MFFragmentViewModel2.getData().observe(SomeClass.this,new Observer()){
@凌驾
更改后的公共无效(@Nullable Fragment2Data Fragment2Data){
//做些事情。。。
}
});
}
}
});
有人能告诉我在这种情况下什么是好的解决方案,以及上述解决方案的含义吗

LiveData 1告诉我它的onChanged方法何时被触发,然后我想执行LiveData 2的onChanged方法

这听起来像是

Transformations.switchMap(liveData1, (x) -> { return liveData2; })
                 .observe(...
LiveData 1告诉我它的onChanged方法何时被触发,然后我想执行LiveData 2的onChanged方法

这听起来像是

Transformations.switchMap(liveData1, (x) -> { return liveData2; })
                 .observe(...

伙计,不,使用MediatorLiveData,看@EpicPandaForce,我知道,这是一个可怕的解决方案:D。我尝试很快实现MediatorLiveData,但没有成功。非常感谢你的链接。所以本质上,我将只添加片段1 LiveData作为源,然后从那里开始?@EpicPandaForce你能告诉我最后一件事吗,我必须使用转换。switchMap?嗯。这取决于您试图如何将LiveData链接到另一个LiveData(或不链接)@EpicPandaForce它起作用了!非常感谢你!你想写一个答案让我接受并投票吗?哥们,不,使用MediatorLiveData,看@EpicPandaForce,我知道,这是一个可怕的解决方案:D。我尝试很快实现MediatorLiveData,但没有看透。非常感谢你的链接。所以本质上,我将只添加片段1 LiveData作为源,然后从那里开始?@EpicPandaForce你能告诉我最后一件事吗,我必须使用转换。switchMap?嗯。这取决于您试图如何将LiveData链接到另一个LiveData(或不链接)@EpicPandaForce它起作用了!非常感谢你!你想写一个答案让我接受并投票吗?