根据Android指南,http://developer.android.com/training/basics/fragments/communicating.html 一个片段应该通过托管活动将数据发送到另一个片段。我想知道这是有原因的。 因为在我的代码中,我把一个变量保存到另一个片段的指针,并在onActivityCreated中分配它
//this code is in class FragmentType1, assign the pointer to the FragmentType2 for later use
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final FragmentManager fm = getFragmentManager();
mOtherFragment = (FragmentType2) fm
.findFragmentById(R.id.container_fragment);
}
以后如果我想为FragmentType2设置数据,我只需要调用:
public setData(MyData data){
if (mOtherFragment!=null)
mOtherFragment.setData(data);
}
现在一切正常。这种方法有什么问题? TKS。
答案 0 :(得分:2)
至少有两个理由:
答案 1 :(得分:1)
另一个原因是在托管活动被销毁时维持状态。
娱乐后,你可以从托管活动中获取状态,因为片段本身无法直接保存它的状态。
答案 2 :(得分:0)
最后但并非最不重要的是,对于动态添加的片段来说真的很难,特别是当涉及嵌套片段时,要确保两个片段同时“活着”。碎片生命周期很难管理,使用直接通信假设你完全控制了这一点,这很少是真的。
我认为最好的模型是使用事件总线,如Otto或EventBus或RoboGuice的总线。