我在管理Fragment时遇到了一些奇怪的行为,并想知道SO是否能帮助解释为什么会出现这种情况。
我有两个Fragment,我们称它们为Fragment A和Fragment B。应用程序的一般流程是当用户以某种方式与Fragment A交互时,通过调用fragmentTransaction.replace()
显示Fragment B(在所有情况下都会发生)。当我显示Fragment B时,我将Fragment A添加到后退堆栈;然后,当用户在Fragment B上按下返回按钮时,通过从后退堆栈中弹出来重新显示Fragment A。
这很好,但今天我发现从Fragment B中存在一种流程,它调用fragmentTransaction.replace()
,将Fragment B替换为当前在后退堆栈中的Fragment A实例。
本身并没有任何问题,但是当我从Fragment A返回到Fragment B时,奇怪的行为出现了。如果我调用fragmentTransaction.replace()
,则不会调用Fragment B的onCreate()
方法。
但是,如果我从后退堆栈中弹出Fragment A,然后用Fragment B替换它,则会触发Fragment B的onCreate()
方法。为什么会这样呢?
请注意,Fragment A和Fragment B的所有实例都是在它们的宿主Activity启动时创建的。
为了澄清,第二次调用onCreate()
的情况如下:附加Fragment A =>替换为Fragment B,将Fragment A添加到后退堆栈中=>使用popBackStack()
弹出Fragment A=>再次用Fragment B替换Fragment A。
popBackStack()
必须在做一些不同的事情;我只是好奇那是什么。 - Jonathan