我有一个执行网络操作的活动,成功后,它需要将数据发送到view pager fragment
。
这是我的结构。
活动->主页片段-> ViewPager [Fragment#1,Fragment#2]
现在的问题是我可以将数据从Activity
发送到Home Fragment
,但是我无法将数据发送到View Pager Fragment
,因为活动与其没有任何直接联系。
要解决此问题,我已将网络呼叫从活动转移到片段,一旦我收到service call
的响应,便将数据从viewPager
传递到Home Fragment
片段。
这很好,可以给我想要的结果,但是如果这是正确的方法,我一点也不困惑。
或我可以使用其他一些推荐的方法,并将数据从活动传递到子片段,或查看Pager片段,这些参考不能直接用于活动。
答案 0 :(得分:1)
我将研究新的Android体系结构组件,特别是ViewModel
和LiveData
。 https://developer.android.com/topic/libraries/architecture/viewmodel
ViewModel类旨在存储和管理与UI相关的数据 一种生命周期意识的方法。
您可以创建一个共享视图模型,该活动及其中的任何片段都可以访问该模型。
链接示例:
public class SharedViewModel extends ViewModel {
private final MutableLiveData<Item> selected = new MutableLiveData<Item>();
public void select(Item item) {
selected.setValue(item);
}
public LiveData<Item> getSelected() {
return selected;
}
}
public class MasterFragment extends Fragment {
private SharedViewModel model;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
itemSelector.setOnClickListener(item -> {
model.select(item);
});
}
}
public class DetailFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
model.getSelected().observe(this, item -> {
// Update the UI.
});
}
}
请注意,两个片段在获取时都使用getActivity() ViewModelProvider。结果,两个片段接收相同的 SharedViewModel实例,范围仅限于活动。
以您的示例为例,这避免了将数据从活动向下传递到片段然后是子片段的层次结构,它们都可以引用SharedViewModel
。