【问题标题】:Android BackStack clear but keep rootAndroid BackStack 清除但保持 root
【发布时间】:2013-10-27 22:10:58
【问题描述】:

我目前正在编写一个聊天应用程序。它基本上与 WhatsApp 非常相似: 在启动时有最后一次对话概述。

当我想与某人开始新的对话时,我必须做/通过

  1. 最后一次对话概述活动(单击 + 以查找对话伙伴)
  2. 课程活动(选择课程)
  3. 课程参与者活动(选择伙伴)
  4. 对话活动

所以基本上就是堆栈:[A1, A2, A3, A4]

现在,用户与某个课程成员进行了愉快的聊天,并希望返回上一次对话概览,但当他按下返回按钮时,他将进入 A3,即“课程参与者活动”。

我希望用户通过按 A4 中的后退按钮返回 A1。

错误:[A1, A2, A3 , A4] -> 返回 -> [A1, A2, A3]
右: [A1, A2, A3 , A4] -> 后退 -> [A1]

或者我可以想象

右:[A1, A2, A3] -> 开始 A4 -> [A1, A4]

提前致谢。

[编辑]

答案

原来是这两者的结合。

在 onOptionsItemSelected() 中,由于给定的 google 约定,我将其放入(当然是在 switch 案例中)。

final Intent intent = new Intent(this, MainPage.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

将 Activity A1 的 android:launchMode 定义为 singleTop 在您的 清单。

为什么要组合?只需添加 Flat Intent.FLAG_ACTIVITY_CLEAR_TOP 即可杀死活动 A1。由于这是我的第一个活动,它包含了一些注册/检查实现。当我在销毁后再次启动此活动时,不必要地调用了 onCreate。

启动模式singletop 可以防止这种情况发生。

【问题讨论】:

    标签: android back-stack


    【解决方案1】:

    在清单中将 Activity A1 的 android:launchMode 定义为 singleTop。 在 Activity A4 处按下返回按钮并开始您的 Activity A1,如下所示:

    Intent intent = new Intent(A4.this,  A1.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent); 
    

    有了这个你的 A2,A3 将从堆栈中清除。

    See more for intents.

    编辑:这将适用于您的 [A1, A2, A3 , A4] -> back -> [A1] 要求

    【讨论】:

      【解决方案2】:

      尽量做到与 Android 设计一致。后退按钮返回一项活动。

      改为使用Action Bar 的主页按钮。

      Android design pattern for navigation;

      创建操作栏:

      final ActionBar actionBar = getActionBar();
      actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
      actionBar.setDisplayHomeAsUpEnabled(true);
      

      点击 HomeButton 时返回顶部意图:

      final Intent intent = new Intent(this, MainPage.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      

      【讨论】:

        猜你喜欢
        • 2015-09-30
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 1970-01-01
        相关资源
        最近更新 更多