6

可以说我有

A->B->C->D->E

在 android 后栈中。我希望能够回到以下其中一项:

A->B->C
A->B
A

我怎样才能做到这一点?希望不要强迫点击后退按钮。

4

4 回答 4

18

使用官方开发者页面上关于 Android任务和后台堆栈的图像和信息,您可以看到启动 Activity 的所有其他方式,您可以仅使用FLAG_ACTIVITY_CLEAR_TOPIntent 标志来确保此类行为。

您的常规后退按钮如下:

在此处输入图像描述

但是,当您指定此标志时,您会得到所需的行为,如以下来源的示例所示:

考虑一个由以下活动组成的任务:A、B、C、D。如果 D 调用 startActivity() 并带有解析为活动 B 的组件的 Intent,则 C 和 D 将完成并且 B 接收给定的 Intent,从而导致堆栈现在是:A,B。

于 2013-01-03T16:50:32.307 回答
9

使用FLAG_ACTIVITY_CLEAR_TOP标志。

Intent a = new Intent(this, A.class);
a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(a);
于 2013-01-03T16:29:58.590 回答
3

实际上,要“向上”进入您选择的活动,您应该使用操作栏上使用的“向上”导航:

/** used to handle the "up" button on the action bar, to go to the defined top activity as written on the manifest */
public static void goUpToTopActivity(final Activity currentActivity) {
    final Intent intent = NavUtils.getParentActivityIntent(currentActivity);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    NavUtils.navigateUpTo(currentActivity, intent);
}

为了使用它,您必须在清单上设置该函数应该使用的活动(或者您当然可以通过更改代码自己设置):

如果您使用 actionBarSherlock,对于您希望让上的每个活动,请使用:

<meta-data
    android:name="android.support.PARENT_ACTIVITY"
    android:value="com.your_app.activities.MainActivity" />

如果您使用 android 框架(如果您的 minSdk 版本是 API 16 及更高版本),请使用“ parentActivityName ”属性。

于 2014-02-23T19:47:45.217 回答
1

假设您正在使用 Intent 移动到另一个活动

Intent i = new Intent(A.this,B.class);
startActivity(i);

此代码将带您到“B”活动,当您按下后退按钮时,它将再次带您到“A”活动。如果您不想返回活动“A”,您可以使用....

Intent i = new Intent(A.this,B.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);

有关 Android 中的 Back Stack 的更多信息,请点击此链接:http: //developer.android.com/guide/components/tasks-and-back-stack.html

于 2015-12-05T04:10:17.707 回答