フラグメントについて何か見逃しているかもしれませんが、この動作を理解できません:
フラグメントを含む FrameLayout を持つアクティビティがあります。通常どおり、方向を変更して新しい FrameLayout インスタンスを作成するたびに、アクティビティは破棄されます。しかし、フラグメントを再度作成したくありません。読み込みに時間がかかるため、同じフラグメント インスタンスを保持したいと考えています。
私がやっていることは次のとおりです(FrameLayoutにid = 324があると仮定します):
FragmentManager mng = getFragmentManager();
Fragment frag = (Fragment)mng.findFragmentByTag(DEFAULT_TAG);
//I create a new fragment if it doesn't exist or I remove the fragment from any view that is attached if it existed
if (frag==null) frag = new MyFragment();
else mng.beginTransaction().remove(frag).commit();
//I add the fragment to the newly created FrameLayout
mng.beginTransaction().add(324, frag, DEFAULT_TAG).commit();
クラッシュします:
08-09 11:54:38.970: E/AndroidRuntime(2517): Caused by: java.lang.IllegalArgumentException: Binary XML file line #15: Duplicate id 0x7f050016, tag null, or parent id 0xffffffff with another fragment for com.test.PRMapFragment
08-09 11:54:38.970: E/AndroidRuntime(2517): at android.app.Activity.onCreateView(Activity.java:4248)
初回は大丈夫なのですが、画面を回転させるとクラッシュします。MyFragment 内のフラグメントについて不平を言っていますが、フラグメントが変更されていないため意味がありません。