我正在使用form
和导航流程
fragments
表单 Fragment A -> Fragment B -> Fragment C -> Fragment D
D我需要通过清除堆栈导航到fragment
A,但问题出在fragment
方法onCreateView()
C我正在显示一个对话框
当我通过清除后堆栈从D导航到A时fragment
会出现一个相同的弹出窗口,显示在片段C上
下面是我用来清除堆栈的代码
fragment
答案 0 :(得分:2)
您遇到的问题在于您处理片段生命周期的方式。您希望片段C只执行一次onCreateView
(以显示弹出窗口),但每次创建视图时都会调用onCreateView
(例如,每次调用片段上的删除时)替换工作几乎相同,删除+添加),然后使用popbackstack从backstack添加回来)。
对于您的问题,有两种解决方案:
更清洁的一个:不是从onCreateView
显示你的弹出窗口,而是从片段C中的onCreate
调用它。这样你就可以保证只在创建片段实例时才调用它
不那么干净:不要在Fragment C和D事务之间使用replace
,而是调用add
,这样当你在Fragment D中弹出backstack时,Fragment C onCreateView
赢了&#39 ;因为视图从未被销毁(从未被称为删除/替换),所以被调用。