簡體   English   中英

Viewmodel Livedata不會更新數據觀察者

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM