3 回答
TA贡献1854条经验 获得超8个赞
我已经开始活动A-> B-> C-> D. 当按下后退按钮时,活动DI想要转到活动A.由于A是我的起点,因此已经在堆栈中,A顶部的所有活动都被清除,你不能回到A的任何其他活动。
这实际上适用于我的代码:
@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);
}
TA贡献1875条经验 获得超5个赞
为此,我使用FLAG_ACTIVITY_CLEAR_TOP标志启动Intent
(没有FLAG_ACTIVITY_NEW_TASK)
并launchMode = "singleTask"在发布活动的清单中。
似乎它按我的需要工作 - 活动不会重新启动,所有其他活动都会关闭。
TA贡献1828条经验 获得超13个赞
虽然这个问题已经有了足够的答案,但我想有人会想知道为什么这个标志以这种特殊的方式工作,这就是我在Android文档中找到的
上面示例中当前运行的活动B实例将在其onNewIntent()方法中接收您从此处开始的新intent,或者本身已完成并使用新intent重新启动。
如果它已将其启动模式声明为“多个”(默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成并重新创建; 对于所有其他启动模式或如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例的onNewIntent()。
所以,要么,
1。launchMode从标准(即。singleTask或某事物)将活动A 更改为其他内容。那么你的旗帜FLAG_ACTIVITY_CLEAR_TOP将不会重新启动你的活动A.
要么,
2。使用Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP为您的标志。然后它会以你想要的方式工作。
添加回答
举报