为了账号安全,请及时绑定邮箱和手机立即绑定

碎片中的碎片

碎片中的碎片

尚方宝剑之说 2019-07-03 15:42:26
碎片中的碎片我想知道这是否是AndroidAPI中的一个bug:我有这样的安排:┌----┬---------┐|    |         ||  1 |    2    ||    |┌-------┐||    ||       |||    ||   3   ||└----┴┴-------┴┘是一个菜单,它在右窗格中加载片段#2(搜索屏幕)。是一个搜索屏幕,其中包含片段#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.leftPane和R.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?
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

。可以清除父片段中嵌套的片段destroyview方法:

@Override
    public void onDestroyView() {

      try{
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();

        transaction.remove(nestedFragment);

        transaction.commit();
      }catch(Exception e){
      }

        super.onDestroyView();
    }


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 314 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信