android - 使用 ViewModel 同时更新所有片段数据
问题描述
我有 12 个片段UpcomingGamesFragment
,每年每个月重复 12 次,各自的片段显示该月的游戏发布。例如,第一个月将显示 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 个片段呢?
解决方案
您需要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 添加依赖项,
推荐阅读
- google-cloud-platform - 使用 BigQuery 选择今天的日期
- c# - 是否有一些方法可以使用 LINQ to SQL 类从具有外键的 Web API 中的多个表中获取数据
- c - 为什么换行符在导致它没有被打印的字符串之前的位置?
- html - Safari 上的地理位置不起作用(没有权限提示)
- java - Java中的密码块大小返回0
- c# - 如何检查字符串是否与静态类中任何变量的名称匹配?
- node.js - 如何在windows中安装firebase?
- javascript - 脚本 URL Service Worker - 加载 service-worker.js 时不允许遵循重定向
- javascript - 我如何使用 JavaScript 实现这种排序?
- c++ - 如何使用stoi区分字符输入和整数输入?