FragmentTransaction替换导致叠加

时间:2014-09-28 04:19:00

标签: android android-fragments back-stack

我读了这个FragmenManager replace makes overlay,说明问题的解决方案是由于在xml中静态定义了片段。我有同样的问题,但我没有静态定义我的片段,我使用framelayout和片段管理器使用支持片段事务弹出我的DYNAMICALLY创建的片段。这是我的情景:

活动1有一个framelayout,名为" content"在它的xml中。

  1. 创建片段X并替换framelayout" content"。

  2. 单击片段X中的listview项时,将片段Y添加到backstack。显示片段X的" content"被片段Y替换。

  3. 单击片段Y中的按钮时,片段Z将添加到backstack。显示片段Y的" content"被片段Z替换。

  4. 点击片段Z中的按钮弹出后台并替换"内容"使用片段Y的新实例。

  5. 这些步骤按预期工作,除非在我按回到片段X后,单击列表视图项,然后再次执行步骤3。而不是片段Z像之前一样替换片段Y,它覆盖它。为什么会发生这种情况,我该如何解决?感谢

    第2步的代码:

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.addToBackStack("y_screen");
    ft = ft.replace(R.id.content_frame, FragmentY.newInstance(qTitle, qDetails, qObjectID));
    ft.commit();
    

    第3步的代码:

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.addToBackStack("z_screen");
    ft.replace(R.id.content_frame, FragmentZ.newInstance(questionTitle, questionDetails,
                                                         qObjectID));
    ft.commit();
    

    第4步的代码:

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    fm.popBackStack();
    ft.replace(R.id.content_frame, FragmentY.newInstance(questionTitle, questionDetails,    
                                                         qid));
    ft.commit();
    

0 个答案:

没有答案