Android,为什么一个Fragment不应该直接调用另一个?

时间:2014-01-02 05:11:23

标签: android android-fragments

根据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。

3 个答案:

答案 0 :(得分:2)

至少有两个理由:

  • 促进碎片的去耦合。
  • 避免因将一个片段的引用存储在另一个片段中而导致的内存泄漏。

答案 1 :(得分:1)

另一个原因是在托管活动被销毁时维持状态。

娱乐后,你可以从托管活动中获取状态,因为片段本身无法直接保存它的状态。

答案 2 :(得分:0)

最后但并非最不重要的是,对于动态添加的片段来说真的很难,特别是当涉及嵌套片段时,要确保两个片段同时“活着”。碎片生命周期很难管理,使用直接通信假设你完全控制了这一点,这很少是真的。

我认为最好的模型是使用事件总线,如Otto或EventBus或RoboGuice的总线。