这就是我正在尝试做的事情。
我在 MainActivity 中托管了 2 个 fragment 。
fragment 1 只有几个小部件需要更新。 fragment 2 有一个回收器 View 来显示项目列表。
我首先获取数据类的实例并调用其 fetchData 方法。
fetchData() 方法与本地数据库通信,首先查看我的数据是否已存储在本地数据库中。
如果它被存储,那么它只是返回该数据,并且 fragment 2 中的回收器 View 只是显示该数据。
但是,当我必须从互联网获取新数据(如果本地数据库中的数据尚不存在)(这是异步调用)时,就会出现问题。 (我用来调用Web API的库是Volly)
现在我很困惑如何告诉 fragment 1和 fragment 2在数据库更新后使用更新的数据?
最佳答案
架构组件提供了一种连接 Activity 及其内部 fragment 的便捷方法。
创建一个 ViewModel,它将托管您的数据类实例。 https://developer.android.com/topic/libraries/architecture/viewmodel.html#implement
在两个 fragment 中获取 View 模型引用。
final MyModel viewModel = ViewModelProviders.of(getActivity()).get(MyModel.class);
使您的 ViewModel 将数据类的结果公开为 LiveData。 https://developer.android.com/topic/libraries/architecture/livedata.html
private MutableLiveData<String> mCurrentData; public MutableLiveData<String> getCurrentData() { if (mCurrentName == null) { mCurrentData = new MutableLiveData<String>(); } return mCurrentData; } public void updateData() { getCurrentData().setValue(myDataClass.getNewData()); }
订阅您的 fragment 中提供的实时数据。
// Get the ViewModel. mModel = ViewModelProviders.of(getActivity()).get(MyModel.class); // Create the observer which updates the UI. final Observer<String> myObserver = new Observer<String>() { @Override public void onChanged(@Nullable final String newData) { // do something with the new data } }; // Observe the LiveData, passing in this activity as the LifecycleOwner and the observer. mModel.getCurrentData().observe(this, myObserver);
使用这种方法,您的两个 fragment 都将在 ViewModel 中的两个 fragment 的 myObserver
实例中获得相同的更新。
Here您可以找到更详细的指南。
关于android - 如何使用相同的数据异步更新所有 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49377476/