给定的应用程序流程显示在图形和文字描述如下。
- 通过设置,片段 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 重新null
打开getActivity()
。
问题
- 为什么恢复堆栈中不是最顶部的片段?
- 如果恢复片段是正确的 - 我应该如何处理分离的片段?