【发布时间】:2015-11-03 20:29:42
【问题描述】:
有一个流程来添加片段和后来的replace() 片段。所有fragment都是动态添加的,但不是全部调用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();
会
getSupportFragmentManager().findFragmentByTag(frgmtA.NAME);
仍然找到frgmtA?如果添加 frgmtA 时也调用 addToBackStack();
文档说“这首先搜索当前添加到管理器活动的片段;如果没有找到这样的片段,则搜索当前在后台堆栈上的所有片段。”
情况会是
- 添加 frgmtA;不调用添加到堆栈;此处的 UI 状态已更改;
(如果 frgmtA 不是由 add() 动态添加,而是在布局文件中用 class="frgmtA" 进行了分隔怎么办?)。
用 frgmtB 替换(); addToStack();
用 frgmtC 替换(); addToStack();
那么如果 stackTop 是 frgmtC,希望按下后退按钮以带回第一个 frgmtA 及其最后的 UI 状态。
【问题讨论】:
标签: android android-fragments fragment-backstack