给出以下图形和文字描述的应用程序流程。
- 片段1是最低的片段,但通过设置
disallowAddToBackStack
而不在后退栈中。 - 片段2被推入堆栈,使用
fragmentTransaction.addToBackStack()
。 - 将片段1的新实例推入堆栈。
- 从堆栈中弹出最顶部的片段(片段1)。
- 活动2变为前台。
- 活动1变为前台。
这里是我用来处理片段的通用方法:
private void changeContainerViewTo(int containerViewId, Fragment fragment,
Activity activity, String backStackTag) {
if (fragmentIsAlreadyPresent(containerViewId, fragment, activity)) { return; }
final FragmentTransaction fragmentTransaction =
activity.getFragmentManager().beginTransaction();
fragmentTransaction.replace(containerViewId, fragment);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (backStackTag == null) {
fragmentTransaction.disallowAddToBackStack();
} else {
fragmentTransaction.addToBackStack(backStackTag);
}
fragmentTransaction.commit();
}
问题
在上一步中,当活动1恢复时,片段1的最低实例也会恢复。此时,片段1在 getActivity()
上返回null
。
问题
- 为什么不是堆栈顶部的片段会被恢复?
- 如果恢复片段是正确的 - 我应该如何处理已分离的片段?
fragmentTransaction.replace(containerViewId, fragment)
进行的。 - JJD