【问题标题】:removing all fragments so that onBackPressed closes app删除所有片段以便 onBackPressed 关闭应用程序
【发布时间】: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


【解决方案1】:

您可以覆盖 backpressed 方法并关闭应用程序,如下所示:

@Override
public void onBackPressed() {
        finish(); // finish activity
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2021-08-15
    相关资源
    最近更新 更多