带 LiveData 的嵌套观察者(观察观察者)
Nested Observers with LiveData (Observing an observer)
我有一个案例,我有 BottomNavigationView,其中片段是 shown/hidden 而不是 adding/replacing,因此它们不会每次都经历它们的生命周期。
片段 1 正在观察一个数据库 table,片段 2 正在观察另一个数据库。
我的目标是在调用 Fragment 1 的 onChanged 时调用 Fragment 2 的 onChanged。
一个愚蠢而幼稚的解决方案是在 Fragment 2 中设置 Fragment 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...
}
});
}
}
});
有人能告诉我在这种情况下什么是好的解决方案以及上述解决方案的含义吗?
LiveData 1 is to tell me when it's onChanged method has been triggered, then I want to execute the onChanged of LiveData 2
这实际上听起来只是
Transformations.switchMap(liveData1, (x) -> { return liveData2; })
.observe(...
我有一个案例,我有 BottomNavigationView,其中片段是 shown/hidden 而不是 adding/replacing,因此它们不会每次都经历它们的生命周期。
片段 1 正在观察一个数据库 table,片段 2 正在观察另一个数据库。
我的目标是在调用 Fragment 1 的 onChanged 时调用 Fragment 2 的 onChanged。
一个愚蠢而幼稚的解决方案是在 Fragment 2 中设置 Fragment 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...
}
});
}
}
});
有人能告诉我在这种情况下什么是好的解决方案以及上述解决方案的含义吗?
LiveData 1 is to tell me when it's onChanged method has been triggered, then I want to execute the onChanged of LiveData 2
这实际上听起来只是
Transformations.switchMap(liveData1, (x) -> { return liveData2; })
.observe(...