我想知道这是否真的是Android API中的错误:
我有这样的设置:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- 是在右窗格中加载片段2(搜索屏幕)的菜单。
- 是一个搜索屏幕,其中包含片段#3,这是结果列表。
- 结果列表已在多个地方使用(本身就是一个功能完善的高级片段)。
此功能在手机上(在1&2和3是ActivityFragment
s的情况下)效果很好。
但是,当我使用此代码时:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
其中R.id.leftPane
和R.id.rightPane
是<fragment>
水平线性布局中的。
据我了解,以上代码删除了驻留的片段,然后将其替换为新的片段。太棒了……显然,这不会发生,因为当此代码第二次运行时,您会收到以下异常:
07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
这是因为FragmentNumber3的容器已被复制,并且不再具有唯一的ID。在添加新片段之前,初始片段尚未销毁(?)(我认为这意味着尚未替换)。
有人可以告诉我这是否可行(此答案表明不是)还是错误?