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();

やりたいイベントで

  • フレーム 1 のフラグメントをフレーム 2 のフラグメントに置き換えます。
  • 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();

最初の置換は機能しますが、2 番目の置換ではエラーがスローされます。

java.lang.IllegalStateException: Can't change container ID of fragment GalleryFragment{41034f18 #1 id=0x7f060008}: was 2131099656 now 2131099655

フラグメントを削除してから追加することで、別の組み合わせを試しましたが、成功しませんでした。

1 回のトランザクションでこれを行うことは可能ですか?

ありがとう !

4

1 に答える 1

0

フラグメントには親が 1 つしかない可能性があり、フラグメントをある親から別の親に移動しようとしています。

私はこのようなことをしたことはありませんが、最初に元の親コンテナからフラグメントをデタッチ (削除するのではなく、まだ存在するようにデタッチ) し、それを別のコンテナに置き換えると、可能性があります。

そして正直なところ、私は使用しようとするのではなく、直接ID(R.id.whatever)を使用しますgetId()...しかし、それは私の個人的な偏見です。

于 2012-10-07T19:43:15.317 に答える