有一个流程来添加片段,然后稍后进行replace()
操作。所有片段都是动态添加的,但并非所有片段调用了addToBackStack()
。
getSupportFragmentManager().beginTransaction()
.add(R.id.frgment_holder, frgmtA, frgmtA.NAME)
.commit();
在某些情况下,它可以添加另一个,例如:
getSupportFragmentManager().beginTransaction()
.replace(R.id.frgment_holder, frgmtB)
.addToBackStack(frgmtB.NAME)
.commit();
使用带有frgmtB的replace()将从容器R.id.frgment_holder中删除frgmtA。 如果此时按下后退按钮,将弹出frgmtB。但是即使在添加时没有调用addToBackStack(),它是否会重新创建frgmtA?
如果在相同容器中使用一系列混合add()和replace()调用的流程中,有人调用了addToBackStack(),但有人没有调用,则后退按钮的行为会怎样?
编辑:
getSupportFragmentManager().beginTransaction()
.replace(R.id.frgment_holder, frgmtB)
.addToBackStack(frgmtB.NAME)
.commit();
will the
getSupportFragmentManager().findFragmentByTag(frgmtA.NAME);
你还在寻找frgmtA吗?如果在添加frgmtA时也调用了addToBackStack()会发生什么呢?
文档中说:“首先搜索当前添加到管理器活动中的片段;如果没有找到这样的片段,则搜索所有当前在返回堆栈上的片段。”
情况如下:
- 添加frgmtA; 不调用add to stack; UI状态在此处改变;
(如果frgmtA不是通过add()动态添加的,而是在布局文件中指定为class="frgmtA"会怎样呢?)。
用frgmtB替换(); addToStack();
用frgmtC替换(); addToStack();
那么如果stackTop是frgmtC,则希望按下返回按钮时能够将第一个frgmtA和其最后的UI状态带回来。