我有一个活动,当按下某个按钮时我会附加一个片段:
ft.replace(R.id.change_user_fragment_container, changeClientFragment);
ft.addToBackStack(null);
ft.commit();
再次按下按钮可删除片段:
ft.remove(changeClientFragment).commit();
片段被删除,因为它不再显示在屏幕上。但是,当我在执行此序列后按下后退按钮时,我希望活动退出,但这不会发生。我必须再次按下后退按钮才能退出活动。 任何人都可以解释这个并告诉我如何获得我期望的行为吗?
答案 0 :(得分:0)
片段事务add
,remove
,replace
提供了一种动态更改屏幕上布局内容(一个活动)的方法。但是如果你想在后面的堆栈中保留一个片段,那就意味着,当用户按下后退按钮时,它将返回最后一个屏幕(仍在一个活动中),你调用FragmentManager.addToBackStack(tag)
。在这个方法返回之后,你所做的将采取另一个片段交易,这意味着它赢得了t影响以前的backstacked片段事务。因此,使用remove
删除片段,您需要手动调用FragmentManager.popBackStack
(执行方式类似于用户按下后退按钮)以弹出反向堆叠的片段。
FragmentManager.addToBackStack(tag)
和FragmentManager.popBackStack()
正好相反。