[英]Viewmodel Livedata doesn't update data observers
例如,我有12個UpcomingGamesFragment
,每個片段都有一個月發布的不同的游戲數據集,例如第一個12個片段將在2019年1月發布視頻游戲。
在我的應用程序中,有一個帶有平台列表的導航抽屜(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中的Filter抽屜布局中,我也在MainActivity中聲明ViewModel:
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>());
}
}
當我在另一個稱為ViewPagerFragment
的片段ViewPagerFragment
其初始化時,將viewmodel livedata對象傳遞給我的12個片段,方法如下:
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);
}
這是UpcomingGamesFragment中的setLiveData()方法:
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);
}
});
}
我怎么知道實時數據不會更新我所有的片段? 這是因為我的loadReleasesData方法中有一個日志,並且它沒有在Logcat中打印,更不用說它不會更新片段了。 祝你有美好的一天,再見! :)
您的問題不是LiveData
而是ViewModel
實例,您正在使用ViewPagerFragment
:
在片段的onCreateView()
中使用它:
ReleasesViewModel releasesViewModel = ViewModelProviders.of(getActivity()).get(ReleasesViewModel.class);
而不是您的代碼:
// Get the ViewModel
ReleasesViewModel releasesViewModel = ((MainActivity)getActivity()).mReleasesViewModel;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.