假设我有一个片段实例,如下所示:
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个不同的容器中。
换句话说:是否可以对一个容器中的片段进行更改,并将它们同时反映在同一片段中的另一个容器中?
答案 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;
}