У меня есть случай, когда у меня есть BottomNavigationView, где фрагменты отображаются/скрываются вместо добавления/замены, поэтому они не проходят свой жизненный цикл каждый раз.
Фрагмент 1 наблюдает за одной таблицей базы данных, Фрагмент 2 наблюдает за другой.
Моя цель - вызвать onChanged из Фрагмент 2, когда вызывается onChanged из Фрагмент 1.
Глупое и наивное решение, которое сработало, состояло в том, чтобы настроить наблюдателя Фрагмент 1 в Фрагмент 2 и внутри него вызвать другого наблюдателя:
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...
}
});
}
}
});
Может ли кто-нибудь сказать мне, что было бы хорошим решением в этом случае и последствиями решения, упомянутого выше?
@EpicPandaForce Я знаю, это ужасное решение: D. Я попытался реализовать MediatorLiveData очень быстро, но не до конца. Большое спасибо за ссылку. Так что, по сути, я просто добавлю Фрагмент 1 LiveData в качестве источника, а затем пойду оттуда?
@EpicPandaForce Не могли бы вы сказать мне последнее, нужно ли мне использовать Transformations.switchMap?
Эм-м-м. зависит от того, как вы пытаетесь связать LiveData с другим LiveData (или нет)
@EpicPandaForce Я попытаюсь объяснить, надеюсь, это не слишком запутывает. Все, что мне нужно от LiveData 1, это сообщить мне, когда был запущен метод onChanged, после чего я хочу выполнить onChanged LiveData 2. Я только что попытался внедрить MediatorLiveData, я добавляю оба источника, но при добавлении источника LiveData 1 у меня нет доступа к LiveData 2. Итак, я вижу в Фрагмент 2, что он распознает, когда сработал LiveData в Фрагмент 1, но я ничего не могу с этим поделать, так как у меня нет соответствующих данных.
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(...@EpicPandaForce, я попробую реализовать это, судя по моим небольшим исследованиям, похоже, это сработает. Большое спасибо за ваше время и терпение! :)
@EpicPandaForce это сработало! Большое спасибо! Не хотите ли вы написать ответ, чтобы я мог принять его и проголосовать за него?
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(...
Чувак, нет, используй MediatorLiveData, см. stackoverflow.com/a/54292960/2413303