4

嗨,我正在开发 android 应用程序,其中我有像这样的 A-->B-->C 的活动流。

所以我的意图是,一旦 B 打开活动 C 就关闭 A 和 B。为此,我尝试使用 2 个标志: Intent.FLAG_ACTIVITY_CLEAR_TOP and Intent.FLAG_ACTIVITY_SINGLE_TOP

但是当我点击返回时,它显示了活动 B 和 A。我开始这样的活动

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(intent);

我不知道为什么它不起作用?我做错了什么吗?需要帮忙。谢谢你。

4

3 回答 3

2

公共静态最终 int FLAG_ACTIVITY_CLEAR_TOP

如果设置,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是关闭它上面的所有其他活动,并且此 Intent 将被传递到(现在顶部)作为新意图的旧活动。

例如,考虑一个由以下活动组成的任务:A、B、C、D。如果 D 调用 startActivity() 并带有一个解析为活动 B 的组件的 Intent,那么 C 和 D 将完成并且 B 接收给定的 Intent ,导致堆栈现在是:A,B。

上面示例中当前运行的活动 B 实例将在其 onNewIntent() 方法中接收您在此处启动的新意图,或者自身完成并使用新意图重新启动。如果它已声明其启动模式为“多重”(默认)并且您没有设置FLAG_ACTIVITY_SINGLE_TOP相同的意图,那么它将完成并重新创建;对于所有其他启动模式,或者如果FLAG_ACTIVITY_SINGLE_TOP已设置,则此 Intent 将被传递到当前实例的 onNewIntent()。

这种启动模式也可以与FLAG_ACTIVITY_NEW_TASK: 如果用于启动任务的根活动,它将将该任务的任何当前正在运行的实例带到前台,然后将其清除为根状态。这尤其有用,例如,当从通知管理器启动活动时。

Intent a = new Intent(this,A.class);
        a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(a);

更多信息请看这里

于 2013-10-11T07:00:50.403 回答
1

我知道它有点晚了,但是对于其他正在寻求解决方案的人来说,调用 finish() 就可以了。

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    finish();
于 2014-05-09T08:19:05.560 回答
0

删除 Intent.FLAG_ACTIVITY_SINGLE_TOP

于 2013-10-11T06:55:44.143 回答