Android BackStack清除但保持root

时间:2013-10-27 22:10:59

标签: android back-stack

我正在撰写聊天应用。它与WhatsApp基本上非常相似: 在启动时,有最后一次会话概述。

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

  1. 上次对话概述活动(点击+查找对话伙伴)
  2. 课程活动(选择课程)
  3. 课程参与者活动(选择合作伙伴)
  4. 对话活动
  5. 所以这基本上是堆栈:[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约定,我把它(当然是在一个切换的情况下)。

    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。由于这是我的第一次活动,它包含了一些注册/检查实施。当我在销毁之后再次启动此活动时,不必要地调用了创建。

    launchmode singletop阻止了这一点。

2 个答案:

答案 0 :(得分:2)

在您的清单中将活动A1的android:launchMode定义为singleTop。 在活动A4处按下后退按钮,然后开始您的活动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] - >回来 - > [A1]要求

答案 1 :(得分:1)

尝试与Android设计保持一致。后退按钮返回一项活动。

而是使用Action Bar的主页按钮。

Android design pattern for navigation;

创建ActionBar:

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);