0

我的主视图由 2 个片段组成

gfs = new GalleriesFragment();
gf = new GalleryFragment();

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.frame1,gfs);
ft.add(R.id.frame2,gf);
ft.commit();

在我想参加的活动中

  • 用第 2 帧中的片段替换第 1 帧片段。
  • 用新片段替换 frame2 片段

(类似于 gmail 应用程序)

所以我这样做:

ImageFragment ig = new ImageFragment();
FragmentTransaction transaction = null;
transaction = getFragmentManager().beginTransaction();
transaction.replace(gf.getId(), ig);
transaction.replace(gfs.getId(), gf);
transaction.addToBackStack("remove1");
transaction.commit();

第一次替换有效,但第二次抛出错误:

java.lang.IllegalStateException:无法更改片段 GalleryFragment{41034f18 #1 id=0x7f060008} 的容器 ID:以前是 2131099656 现在是 2131099655

我尝试了不同的组合,通过删除然后添加片段但没有成功。

是否可以仅在一次交易中做到这一点?

谢谢 !

4

1 回答 1

0

一个片段可能只有一个父级,而您正试图将片段从一个父级移动到另一个父级。

我从来没有做过这样的事情,但是如果你首先从原始父容器中分离(不是删除,而是分离所以它仍然存在)片段然后将它替换到另一个中,那么它可能是可能的。

老实说,我会使用直接 id (R.id.whatever) 而不是尝试使用getId()... 但这只是我个人的偏见。

于 2012-10-07T19:43:15.317 回答