Например, у меня есть 12 UpcomingGamesFragment
, и каждый фрагмент имеет другой набор игровых данных, выпускаемых в месяц, например, в первом фрагменте из 12 видеоигры будут выпущены в январе 2019 года.
В моем приложении есть панель навигации со списком платформ (ps4, xbox, pc и т. Д.), И когда пользователь выбирает свои консоли, нажимая флажки, а затем закрывает макет ящика, я хочу, чтобы все фрагменты обновлялись. соответственно. Вроде только показывать игры, выпускаемые на этих платформах. Получение и фильтрация успешно работают с помощью метода в UpcomingGamesFragment
под названием loadReleasesData()
Теперь я хочу, чтобы все фрагменты обновлялись, когда панель навигации закрывается, потому что моя реализация не работает, скажите, пожалуйста, что не так.
Вот мой класс ViewModel:
public class ReleasesViewModel extends ViewModel {
private MutableLiveData<List<_Release>> upcomingReleases = new MutableLiveData<>();
public ReleasesViewModel() { }
public MutableLiveData<List<_Release>> getUpcomingReleases() {
return upcomingReleases;
}
}
И в моем макете ящика фильтров в моем MainActivity, а также я объявляю свою ViewModel в моем MainActivity:
OnCreate (большая часть кода опущена для ясности)
mReleasesViewModel = ViewModelProviders.of(this).get(ReleasesViewModel.class);
Макет моего ящика при закрытии:
@Override
public void onDrawerClosed(@NonNull View drawerView) {
// If change detected refresh!
if (!mCopyOfUserPlatforms.equals(SharedPrefManager.read(SharedPrefManager.PLATFORM_IDS, mDefaultPlatformsSet))) {
mReleasesViewModel.getUpcomingReleases().setValue(new ArrayList<_Release>());
}
}
И я передаю объект liveata модели представления своим 12 фрагментам, когда я инициализирую их в другом фрагменте, называемом ViewPagerFragment
, вот как:
onCreateView:
// Get the ViewModel
ReleasesViewModel releasesViewModel = ((MainActivity)getActivity()).mReleasesViewModel;
for (int i = 0; i < 14; i++) {
UpcomingGamesFragment upcomingGamesFragment = new UpcomingGamesFragment();
upcomingGamesFragment.setLiveData(releasesViewModel); // HERE
mSectionsPagerAdapter.addFragment(upcomingGamesFragment, title, queryId);
}
Это мой метод setLiveData () в UpcomingGamesFragment:
public void setLiveData(ReleasesViewModel releasesViewModel) {
releasesViewModel.getUpcomingReleases().observe(this, new android.arch.lifecycle.Observer<List<_Release>>() {
@Override
public void onChanged(@Nullable List<_Release> releases) {
Log.d(TAG, "Refreshing this baby boy...");
loadReleaseData(0);
}
});
}
Как я узнаю, что liveata обновляет не все мои фрагменты? Это потому, что у меня есть журнал в моем методе loadReleasesData, и он не печатается в Logcat, не говоря уже о том, что он не обновляет фрагмент (ы). Хорошего дня и до свидания! :)