猿问

碎片中的碎片

碎片中的碎片

我想知道这是否是AndroidAPI中的一个bug:

我有这样的安排:

┌----┬---------┐

|    |         |

|  1 |    2    |

|    |┌-------┐|

|    ||       ||

|    ||   3   ||

└----┴┴-------┴┘


  1. 是一个菜单,它在右窗格中加载片段#2(搜索屏幕)。
  2. 是一个搜索屏幕,其中包含片段#3,这是一个结果列表。
  3. 结果列表在几个地方使用(包括作为一个功能较高的片段本身)。

这个功能在手机上非常好地工作(其中1&2和3是ActivityFragments)。

但是,当我使用此代码时:

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();       
    Fragment frag = new FragmentNumber2();
    if(toLoad != null) frag.setArguments(toLoad);
    transaction.replace(R.id.rightPane, frag);      
    transaction.commit();

哪里R.id.leftPaneR.id.rightPane<fragment>s在水平线性布局中。

据我理解,上面的代码删除了驻留的片段,然后用一个新的片段替换它。才华横溢.。显然,这不是发生的情况,因为当第二次运行此代码时,您会得到以下异常:

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。最初的片段还没有被销毁(?)在添加新的之前(在我看来,这意味着它还没有取代).

有人能告诉我这是否可能吗这个答案暗示它不是),还是它是一个bug?


尚方宝剑之说
浏览 315回答 3
3回答

吃鸡游戏

。可以清除父片段中嵌套的片段destroyview方法:@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onDestroyView()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FragmentTransaction&nbsp;transaction&nbsp;=&nbsp;getSupportFragmentManager() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.beginTransaction(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.remove(nestedFragment); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction.commit(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onDestroyView(); &nbsp;&nbsp;&nbsp;&nbsp;}
随时随地看视频慕课网APP

相关分类

Android
我要回答