也许我错过了关于片段的一些东西,但我无法理解这种行为:
我有一个带有 FrameLayout 的 Activity,其中包含一个片段。像往常一样,每次我更改方向创建一个新的 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 中的片段,但没有意义,因为片段没有改变。