交换片段

时间:2012-10-07 18:05:52

标签: android android-fragments

我的主要观点是由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帧中的片段替换frame1片段。
  • 用新片段替换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#1 id = 0x7f060008}:现在是2131099656   2131099655

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

是否可以仅在一次交易中执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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