Android 带有LiveData的嵌套观察者(观察观察者)
我有一个例子,在BottomNavigationView中显示/隐藏片段,而不是添加/替换,因此它们不会每次都经历生命周期 片段1正在观察一个数据库表,片段2正在观察另一个数据库表 我的目标是在调用片段1的onChanged时调用片段2的onChanged 一个愚蠢而天真的解决方案是在片段2中设置片段1的观察者,并在其中调用另一个观察者: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>(
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它起作用了!非常感谢你!你想写一个答案让我接受并投票吗?