删除除第一个以外的所有活动

时间:2013-02-07 18:08:57

标签: java android android-activity

我想编写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,但第一个不会被“触摸”?

3 个答案:

答案 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中。