片段后栈清除问题

时间:2017-11-09 10:18:49

标签: android android-fragments alertdialog fragment-backstack

我正在使用form和导航流程

fragments

表单 Fragment A -> Fragment B -> Fragment C -> Fragment D D我需要通过清除堆栈导航到fragment A,但问题出在fragment方法onCreateView() C我正在显示一个对话框

当我通过清除后堆栈从D导航到A时fragment会出现一个相同的弹出窗口,显示在片段C上

下面是我用来清除堆栈的代码

fragment

1 个答案:

答案 0 :(得分:2)

您遇到的问题在于您处理片段生命周期的方式。您希望片段C只执行一次onCreateView(以显示弹出窗口),但每次创建视图时都会调用onCreateView(例如,每次调用片段上的删除时)替换工作几乎相同,删除+添加),然后使用popbackstack从backstack添加回来)。

对于您的问题,有两种解决方案:

更清洁的一个:不是从onCreateView显示你的弹出窗口,而是从片段C中的onCreate调用它。这样你就可以保证只在创建片段实例时才调用它

不那么干净:不要在Fragment C和D事务之间使用replace,而是调用add,这样当你在Fragment D中弹出backstack时,Fragment C onCreateView赢了&#39 ;因为视图从未被销毁(从未被称为删除/替换),所以被调用。