Android 交换片段

Android 交换片段,android,android-fragments,Android,Android Fragments,我的主视图由两个片段组成 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片段 (类似于gm

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

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:无法更改片段的容器ID GalleryFragment{41034f18#1id=0x7f060008}:现在是21301099656 21301099655

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

是否可以只在一个事务中执行此操作


谢谢

一个片段可能只有一个父级,您正在尝试将该片段从一个父级移动到另一个父级

我从未做过类似的事情,但如果您先从原始父容器中分离(不是移除,而是分离,使其仍然存在)片段,然后将其替换到另一个容器中,这是可能的


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

为什么不用一个可分包的旧片段数据创建一个新片段呢。