我想编写Home按钮,因此它将删除堆栈中的所有Activities
,除了一个。我在这里做到了:How to finish every activity on the stack except the first in Android
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case android.R.id.home:
Intent intent = new Intent(this, AMainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
break;
...
但这种方式不适合我,因为它会删除所有Activities
(包括第一个)并再次启动第一个。例如 - 如果我在onCreate()
中检查用户密码,则会再次询问他。
如何从堆栈中删除所有Activities
,但第一个不会被“触摸”?
答案 0 :(得分:2)
是的,根据Intent.FLAG_ACTIVITY_CLEAR_TOP
的文档:
上面示例中当前运行的活动B实例将接收您在其onNewIntent()方法中启动的新intent,或者自己完成并使用新intent重新启动。如果它已将其启动模式声明为“多个”(默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建; 用于所有其他启动模式或者如果FLAG_ACTIVITY_SINGLE_TOP是然后设置此Intent将被传递到当前实例的onNewIntent()。
因此,请使用其他Intent
标志:
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
不应重新创建您的活动。相反,它只会通过调用onNewIntent()
来获得新意图。
答案 1 :(得分:1)
将以下属性添加到manifest.xml中的AMainActivity的Activity标记。
android:launchMode="singleTop"
答案 2 :(得分:0)
您可以在清单中的活动声明中使用ExcludeFromRecent = "true"
标志,您不希望在Stack中。