我想知道这是否实际上是Android API中的一个bug:
我的设置如下:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- 一个菜单,可以在右侧面板中加载片段2(搜索屏幕)。
- 一个搜索屏幕,包含了片段3,即结果列表。
- 结果列表在多个地方使用(包括作为自身的高级别片段)。
这个功能在手机上运行良好(其中1和2和3都是ActivityFragment
)。
然而,当我使用了这段代码时:
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所导致的。在新的Fragment被添加之前,初始的Fragment没有被销毁(在我看来,这意味着它没有被替换)。
请问是否有可能实现这一点(此答案表明不可能),或者这是一个bug?