java - 如何使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 清除 Activity Stack?

标签 java android android-intent android-activity android-manifest

我已经阅读了几篇关于使用它的帖子,但一定遗漏了一些东西,因为它对我不起作用。我的 Activity A 在 list 中有 launchmode="singleTop"。它以 launchmode="singleInstance"启动 Activity B。 Activity B 打开一个浏览器并收到一个返回的 Intent ,这就是它是 singleInstance 的原因。我正在尝试覆盖返回按钮,以便将用户发送回 Activity A,然后可以按返回离开 Activity ,而不是再次返回 Activity B。

// activity B
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
  && keyCode == KeyEvent.KEYCODE_BACK
  && event.getRepeatCount() == 0) onBackPressed();
 return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
 startActivity(new Intent(this, UI.class)
 .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
 return;
}

从浏览器返回后,栈... A,B,浏览器,B

我希望这段代码将堆栈更改为... 一个 ...因此再次按下返回会将用户带回主屏幕。

相反,它似乎将堆栈更改为... A,B,浏览器,B,A ...就好像那些标志不存在一样。

我尝试在 startActivity 之后在 Activity B 中调用 finish(),但随后返回按钮将我再次带回浏览器!

我错过了什么?

最佳答案

我已经开始了 Activity A->B->C->D。 当在 Activity D 上按下后退按钮时,我想转到 Activity A。因为 A 是我的起点,因此已经在堆栈上,所以 A 顶部的所有 Activity 都被清除,你不能从 A 返回任何其他 Activity .

这实际上适用于我的代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        Intent a = new Intent(this,A.class);
        a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(a);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}       

关于java - 如何使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 清除 Activity Stack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4342761/

相关文章:

java - 应用程序范围记录器的最佳实践

java - 黑莓持久对象

java - onActivityResult 崩溃

java - Headless Chrome 的性能问题

java - 在 OS X 上的 Java swing 中设置默认应用程序图标图像

android - 面临android编译错误

java - 无法执行从 Android 应用程序到 ASP.NET WebAPI 的 HTTPPost 请求

android - Android 中的窗口从白色淡入/淡出

android - 如何使用 Intent 打开显示 "Group"选项卡的联系人?

java - 使用 onClickListener 时出错( Intent )