【发布时间】:2017-10-05 17:16:51
【问题描述】:
我目前有一个流 A -> B -> C -> D 在活动 1 中启动的 android 应用程序。
在 D 之后,我启动了活动 2,并运行以下代码以从堆栈中删除所有片段。
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
}
}
我的问题是,当我从活动 2 返回到活动 1 时,当我按下返回键时,片段 C 动画返回屏幕。片段 D 确实删除,但 A B C 没有。我希望应用程序在活动 1 的后退时关闭。
我在此处附上了删除我的片段的代码。调试显示fragment 确实随着每个循环而改变。
谁能告诉这里发生了什么?
【问题讨论】:
-
D->C->B->A 的欲望行为是什么?为什么要添加到 backstack 中?
-
您将所有片段添加到后台堆栈是否有特定原因?另外,当用户从 Activity 2 回到 Activity 1 时,您希望显示什么片段?
-
我添加到后台堆栈是因为在片段中,如果按下返回键,我希望能够导航回它们。如果对服务器的调用成功,则行为是 A>B>C>D> 打开活动 2。如果我从活动 2 返回到活动 1,我不希望任何片段出现在 backkeypress 上,而是希望它退出应用程序。
-
我没有意识到
getSupportFragmentManager().beginTransaction().remove(fragment).commit();不会从后台删除。我添加了从后台堆栈中删除的代码,这给了我想要的功能。在这种情况下,我对 backstack 的使用是否正确?还是没用?
标签: android fragment onbackpressed