活动回堆栈 - 保留第一个lanched活动并清除其他活动

时间:2014-10-17 02:24:33

标签: android android-intent back-stack

情况如下。 A是应用程序启动的第一个活动。

给出A - > B,如果我呼叫活动F,它变成A - > F清算B.

然而,存在诸如从A调用F的情况 - > B - > C.它应该再次解析为A - > F.因此,我认为FLAG_ACTIVITY_NO_HISTORY不起作用。

修改: 澄清 结构就像,

A(发布)

B D F(第2级,A - > B,A - > D,或A - > F)

C E(第3级,A - > B - > C或A - > D - > E)

我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

当您在A-> B并想要启动F时,在B上调用finish()然后在startActivity(F)上调用。然后你的背书将是A-> F。

如果您的堆叠较大(A-> B-> C)并且您希望它变为A-> F,则可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK将任务带回A,然后从根调用您需要的任何内容。

像这样的东西

class A {
    public void onStart(){
        Intent intent = getIntent();
        if(intent != null && intent.contains(EXTRA_INVOKE)){
            startActivity(Class.forName(intent.getExtra(EXTRA_INVOKE)));
        }
    }

    public static void restoreStackTo(Context context, Class<? extends Activity> clazz){
        Intent intent = new Intent(context, A.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
        intent.putExtra(EXTRA_INVOKE, clazz.toString());
        startActivity(intent);
    }
}

并将其用作

A.restoreStackTo(F.class) 
当堆栈是,例如,A-> B-> C时,来自C的