【发布时间】:2014-08-08 21:59:31
【问题描述】:
场景如下:
“仪表板片段”-> 片段 1。此事务被添加到后台堆栈。将片段替换为“frag1”时指定了标签;
Fragment 1 -> Fragment 2。此事务也被添加到后台堆栈。执行替换操作时带有标签。标签是让我们说“frag2”。
现在在片段 2 中,当用户想要保存数据时,它会调用 Web 服务。如果成功,我想用 NEW Fragment 1 替换 Fragment 2。如果用户按下取消按钮,它将简单地执行后按事件并加载 Fragment 1。
在Web服务调用成功的情况下,更换是正确的,但是当我按下返回按钮时,仍然有OLDER Fragment 1。原因很明显。
为了在 Fragment 2 中的 Web 服务调用成功时摆脱这种情况,我编写了以下代码。
if (null != getActivity().getSupportFragmentManager().findFragmentByTag("frag1")) {
getActivity().getSupportFragmentManager().beginTransaction().remove
(getActivity().getSupportFragmentManager().findFragmentByTag("frag1"));
}
loadFragment1();
然后我使用回调方法将Fragment 1加载到相同的框架布局中并替换Fragment 2。
它进入 if 块内部,但旧片段“Fragment1”仍然存在 - 未受伤害。 我没有在方法 addToBackStack() 中使用任何标签,并保持它像这样 addToBackStack(null)
我无法删除旧的 Fragment 1。请让我知道这种方法有什么问题。谢谢。
【问题讨论】:
标签: android android-fragments back-stack fragmenttransaction