可以将单个片段实例同时添加到多个容器中吗?

时间:2014-04-12 23:41:22

标签: android android-layout android-fragments

假设我有一个片段实例,如下所示:

Fragment my_fragment = new MyFragment();

我可以这样做吗?

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.container1, my_fragment, "my_fragment tag");
ft.commit();
getFragmentManager().executePendingTransactions();

FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.add(R.id.container2, my_fragment, "my_fragment tag");
ft2.commit();
getFragmentManager().executePendingTransactions();

澄清;我想要MyFragment类的2个独立实例,我想知道是否可以将单个片段实例同时添加到2个不同的容器中。

换句话说:是否可以对一个容器中的片段进行更改,并将它们同时反映在同一片段中的另一个容器中?

2 个答案:

答案 0 :(得分:3)

  

我可以这样做吗?

没有

  

我在询问是否可以将单个片段实例同时添加到2个不同的容器中

不,出于同样的原因,你不能在两个单独的容器中同时拥有View。每个View都有一个父母;由片段管理的每个内容View都有一个父级。

  

是否可以对一个容器中的片段进行更改,并将它们同时反映在同一片段中的另一个容器中?

没有。欢迎您有两个片段实例,可以通过事件总线相互通信,以便一个中的更改可以反映为另一个中的更改。

答案 1 :(得分:1)

不,您无法将相同的片段添加到多个容器中。如果您尝试这样做,将抛出以下异常。原因由above post解释。

if (containerViewId != 0) {
    if (fragment.mFragmentId != 0 && fragment.mFragmentId != containerViewId) {
        throw new IllegalStateException("Can't change container ID of fragment "
                + fragment + ": was " + fragment.mFragmentId
                + " now " + containerViewId);
    }
    fragment.mContainerId = fragment.mFragmentId = containerViewId;
}