我已经阅读了几篇关于使用它的帖子,但必须遗漏一些东西,因为它对我不起作用。我的活动 A 在清单中有 launchmode=“singleTop” 。它以 launchmode=“singleInstance” 启动活动 B。 Activity B 打开一个浏览器并收到一个返回的意图,这就是它是 singleInstance 的原因。我正在尝试覆盖后退按钮,以便将用户发送回活动 A,然后可以按返回离开活动,而不是再次返回活动 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,Browser,B
我希望此代码将堆栈更改为… A … 以便再次按下返回将用户带回主屏幕。
相反,它似乎将堆栈更改为… A,B,Browser,B,A …就好像那些标志不存在一样。
我尝试在 startActivity 之后在活动 B 中调用 finish(),但是后退按钮再次将我带回浏览器!
我错过了什么?
原文由 piusvelte 发布,翻译遵循 CC BY-SA 4.0 许可协议
@bitestar 有正确的解决方案,但还有一步:
它隐藏在文档中,但是您必须将
launchMode
的Activity
--- 更改为standard
以外的任何内容。否则它将被销毁并重新创建,而不是被重置到顶部。