Android清除中间活动

时间:2016-10-30 18:05:38

标签: java android android-intent android-activity stack

我有5项活动,

A - 基础活动

B,C,D - 正常活动

E - 最终活动

A-B-C-d-E

我从A到B导航到C到D,D把我带到E.我想要行为:如果我按下D上的按钮它应该带我到C,C的后退按钮应该带我到B到A但是如果我从D转移到活动E,我想要E的后退按钮它应该带我去跳过B,C和D.

3 个答案:

答案 0 :(得分:2)

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,完成BCDE

使用FLAG_ACTIVITY_SINGLE_TOP可确保您返回A的现有实例。如果您还要完成现有的A实例并创建一个新的实例,只需删除FLAG_ACTIVITY_SINGLE_TOP

答案 1 :(得分:1)

您可以使用静态变量来跟踪您来自哪个活动。然后重写onBackPressed以检查该变量并移至相应的活动。类似的东西:

public static Boolean skipActivities = false;

然后当您从D开始活动E时将其设置为true。为了您的活动E:

@Override
public void onBackPressed() {
    if (skipActivities){
        //start activity A, skipActivities should be reset to false also
    } else {
        super.onBackPressed();
    }
}

答案 2 :(得分:0)

您可以使用affinity对您的活动进行“分组”。 因此,在Manifest文件中,将android:taskAffinity="activity.normal"添加到活动B,C,D,E中。现在,您可以通过调用finishAffinity()(而不是通常的finish())来完成这些活动中的所有群组,在您的情况下,您只需添加到E活动:

@Override
public void onBackPressed() {
    finishAffinity();
    super.onBackPressed();
}