有一个添加片段和以后replace()
片段的流程。所有片段都是动态添加的,但不是所有的 call addToBackStack()
。
getSupportFragmentManager().beginTransaction()
.add(R.id.frgment_holder, frgmtA, frgmtA.NAME)
.commit();
在某个地方它可以添加另一个,例如:
getSupportFragmentManager().beginTransaction()
.replace(R.id.frgment_holder, frgmtB)
.addToBackStack(frgmtB.NAME)
.commit();
使用replace()
frgmtB 将从容器 R.id.frgment_holder 中删除 frgmtA。如果在此状态下按返回按钮,则会弹出 frgmtB。但是,即使它addToBackStack()
在添加时没有调用,它会重新创建 frgmtA 吗?
如果在将片段添加到同一个容器中的流程中,使用连续的 add() 和 replace() 调用,并且有人调用addToBackStack()
但有人没有调用,那么后退按钮的行为会如何?
编辑:之后
getSupportFragmentManager().beginTransaction()
.replace(R.id.frgment_holder, frgmtB)
.addToBackStack(frgmtB.NAME)
.commit();
将
getSupportFragmentManager().findFragmentByTag(frgmtA.NAME);
仍然找到frgmtA?如果添加 frgmtA 时也调用 addToBackStack();
文档说“这首先搜索当前添加到管理器活动的片段;如果没有找到这样的片段,则搜索当前在后台堆栈中的所有片段。”
情况将是
- 添加frgmtA;不调用添加到堆栈;UI 状态在此处更改;
(如果 frgmtA 不是由 add() 动态添加,而是在布局文件中使用 class="frgmtA" 进行了分隔怎么办?)。
用 frgmtB 替换();addToStack();
用 frgmtC 替换();addToStack();
那么如果stackTop 是frgmtC,希望按下后退按钮以带回第一个frgmtA 及其最后的UI 状态。