我有5个活动,
A - 基础活动
B,C,D - 普通活动
E - 最终活动
A-B-C-D-E
我从A到B到C到D导航,D带我到E。我想要的行为是:如果我在D上按返回按钮,则应将我带回C,从C的返回按钮应将我向下带回B到A。但是,如果我从D移动到Activity E,则希望从E的返回按钮跳过B,C和D将我带回A。
我有5个活动,
A - 基础活动
B,C,D - 普通活动
E - 最终活动
A-B-C-D-E
我从A到B到C到D导航,D带我到E。我想要的行为是:如果我在D上按返回按钮,则应将我带回C,从C的返回按钮应将我向下带回B到A。但是,如果我从D移动到Activity E,则希望从E的返回按钮跳过B,C和D将我带回A。
E
中:@Override
public void onBackPressed() {
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
这将回到A
,完成B
,C
,D
和E
。
使用FLAG_ACTIVITY_SINGLE_TOP
可以确保您返回到现有的A
实例。如果还想结束现有的A
实例并创建一个新的实例进行返回,则只需删除FLAG_ACTIVITY_SINGLE_TOP
即可。
public static Boolean skipActivities = false;
@Override
public void onBackPressed() {
if (skipActivities){
//start activity A, skipActivities should be reset to false also
} else {
super.onBackPressed();
}
}
static
变量是错误的方法。这是不良的架构设计。有简单的Intent
标志可以完全满足OP的需求。 - David Wasser你可以使用 affinity
来“分组”你的活动。
因此,在清单文件中将 android:taskAffinity="activity.normal"
添加到B、C、D、E活动中。现在,通过调用 finishAffinity()
(而不是通常的 finish()
)即可在任何这些活动中完成该组中的所有活动。在你的情况下,你只需将其添加到E活动中:
@Override
public void onBackPressed() {
finishAffinity();
super.onBackPressed();
}
taskAffinity
来实现这个目的是完全错误的。不仅如此,这个功能只存在于API级别16及以上。如果在清单中的不同活动中提供不同的taskAffinity
,你很快就会得到应用程序的2个任务,这绝对不是你想要的,也不是用户所期望的。这样做会打开一个大问题,你需要完全理解才能做到。有简单的Intent
标志可以做到OP想要的事情,并且它适用于API级别1及更高版本。 - David Wasser