我有12个片段UpcomingGamesFragment
,每年的每个月重复十二次,各自的片段显示该月的游戏版本。例如,第一个月将显示2019年1月发布的游戏,下一个片断将包含2019年2月发布的游戏,等等。
我要构建的是使用ViewModel
的体系结构。一个ViewModel
,它将在我的所有12个片段之间共享,并且会(通过LiveData)触发所有片段的数据更改,但是我不知道如何使用此ViewModel
类来完成对所有可见的片段,这是我的UpcomingGamesFragment
类,带有请求月份数据方法:
public class UpcomingGamesFragment extends Fragment {
public void loadReleaseData(final int refresh) {
if (mDatabaseLoading == null) {
Log.d(TAG, "Fragment filter " + mFilter + " [fragment is null]");
return;
} else {
Log.d(TAG, "Updating fragment: " + mFilter);
}
if (AppUtil.doesInternetWork(getActivity())) {
// update, data fetched from firebase
}
}
这12个片段在另一个片段中初始化,该片段显示在MainActivity
中,该片段称为UpcomingViewPagerFragment
,它在一个循环中创建了12个UpcomingGamesFragment
。
这是我的ViewModel
课:
public class ReleasesViewModel extends ViewModel {
private MutableLiveData<List<_Release>> upcomingFragmentLiveData =
new MutableLiveData<>();
public ReleasesViewModel() {
}
public LiveData<List<_Release>> getUpcomingFragmentList() {
return upcomingFragmentLiveData;
}
}
那么如何使用loadReleaseData
方法更新12个片段,并计算每个片段的生命周期?
答案 0 :(得分:0)
假定所有片段内容都是代码中其他位置保存的值,并假定您正确更新了这些值。相应地更新所有片段的最简单方法是调用:
notifyDataSetChanged();
答案 1 :(得分:0)
您需要在片段中检索ViewModel
类对象,并从中注册LiveData
,
ReleasesViewModel obj = ViewModelProviders.of(getActivity()).get(ReleasesViewModel.class);
在片段的onCreate()
方法中,然后使用视图模型的obj来观察实时数据,例如,
(obj of your view model).getUpcomingFragmentList().observe(this, `your observer for that fragment`);
对于您的实例:
一旦
ViewModel
中的实时数据发生任何数据更改,就会调用此方法。obj.getUpcomingFragmentList().observe(this, new Observer<List<_Release>>() >{ @Override public void onChanged(@Nullable List<_Release> list) { } });
如果找不到ViewModelProviders类,则需要从此处为ViewModel和livedata添加依赖项,