片段被删除但仍然吃后退按钮

时间:2014-04-05 19:28:21

标签: android android-ui

我有一个活动,当按下某个按钮时我会附加一个片段:

ft.replace(R.id.change_user_fragment_container, changeClientFragment);
ft.addToBackStack(null);
ft.commit();        

再次按下按钮可删除片段:

ft.remove(changeClientFragment).commit();       

片段被删除,因为它不再显示在屏幕上。但是,当我在执行此序列后按下后退按钮时,我希望活动退出,但这不会发生。我必须再次按下后退按钮才能退出活动。 任何人都可以解释这个并告诉我如何获得我期望的行为吗?

1 个答案:

答案 0 :(得分:0)

首先原谅我的不正确......

片段事务addremovereplace提供了一种动态更改屏幕上布局内容(一个活动)的方法。但是如果你想在后面的堆栈中保留一个片段,那就意味着,当用户按下后退按钮时,它将返回最后一个屏幕(仍在一个活动中),你调用FragmentManager.addToBackStack(tag)。在这个方法返回之后,你所做的将采取另一个片段交易,这意味着它赢得了t影响以前的backstacked片段事务。因此,使用remove删除片段,您需要手动调用FragmentManager.popBackStack(执行方式类似于用户按下后退按钮)以弹出反向堆叠的片段。

简而言之,FragmentManager.addToBackStack(tag)FragmentManager.popBackStack()正好相反。