假设通过以下步骤将片段 A 和片段 B 添加到容器中:
1. Added fragment A => .replace(R.id.container, fragmentA) => addToBackStack(null)
2. Added fragment B => .replace(R.id.container, fragmentB) => addToBackStack(null)
3. Removed fragment B => fragmentManager.popBackStack();
调用 fm.popBackStack() 时的回调:
FragmentB: onPause()
FragmentB: onStop()
FragmentB: onDestroy()
FragmentB: onDetach()
FragmentA: onCreateView()
FragmentA: onViewCreated()
FragmentA: onActivityCreated()
FragmentA: onStart()
FragmentA: onResume()
解释:为什么在使用 popBackStack() 删除和销毁片段 B 时,片段 A 视图被再次创建并恢复?
Ans:当你添加fragment B时,你使用了replace()和addToBackStack(),所以所有的fragment都被从容器中移除了,fragment B被添加到了容器中。并且,此交易也记录在 Back 堆栈中。因此,当调用 fm.popBackStack() 时,首先将事务从返回堆栈中弹出,因此操作会自行恢复,因此片段 b 会从容器中删除并销毁。并且所有其他片段都被添加,因为我们的案例片段 A 的视图被添加到容器中。还注意到片段 A 的 onAttach 和 onCreate() 没有被调用,因为它已经被创建并附加到 MainActivity 之前。
对片段 B 的后按执行相同的操作:
If you press the back button, it calls fm.popBackStack() and pops the transaction.