【问题标题】:Remove all activities except the first one删除除第一个活动之外的所有活动
【发布时间】:2013-02-07 18:08:56
【问题描述】:

我想编写主页按钮,所以它将删除堆栈中的所有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,但不会“触及”第一个?

【问题讨论】:

    标签: java android android-activity


    【解决方案1】:

    在 manifest.xml 中将以下属性添加到 AMainActivity 的 Activity 标记中。

    android:launchMode="singleTop"
    

    【讨论】:

      【解决方案2】:

      是的,根据Intent.FLAG_ACTIVITY_CLEAR_TOP的文档:

      上面示例中当前运行的活动 B 实例将在其 onNewIntent() 方法中接收您在此处启动的新意图,或自身完成并使用新意图重新启动。如果它已将其启动模式声明为“多重”(默认)并且您没有在同一意图中设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建; 对于所有其他启动模式或 FLAG_ACTIVITY_SINGLE_TOP 是设置然后这个 Intent 将被传递到当前实例的 onNewIntent()。

      所以,使用额外的Intent 标志:

      intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
      

      您的活动不应该被重新创建。相反,它只会通过调用onNewIntent() 来传递新的意图。

      【讨论】:

        【解决方案3】:

        您可以在清单中的活动声明中使用ExcludeFromRecent = "true" 标志,您不想在堆栈中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-03
          • 1970-01-01
          • 2021-12-12
          • 1970-01-01
          • 1970-01-01
          • 2017-06-01
          相关资源
          最近更新 更多