启动活动 4 时从返回栈中移除活动2和3

8
我有4个Android活动。我们称它们为A、B、C、D。
正常的流程是A => B => C => D。然而,当我进入D时,我想从后堆栈中移除B和C。
这可行吗?
请注意,如果用户在C中按返回键,B仍应显示!
编辑:使用CLEAR_TOP再次启动Activity A会再次调用Activity A的onCreate方法,这不是我想要的。还有其他解决方案吗?
3个回答

3

我知道这是一个老问题,但最近我也遇到了同样的问题,在任何地方都找不到解决方案。唯一可行的解决方案有点取巧:

使用startActivityForResult从B启动C

Intent intent=new Intent(this,C.class);
startActivityForResult(intent,REQUEST_CODE);

在活动C中,创建用于活动D的意图并将其设置为结果:
Intent intent=new Intent(this,D.class);
setResult(RESULT_OK,intent)
finish();

在Activity B中,完成并启动来自Activity C的intent:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode==REQUEST_CODE) {
        finish();
        startActivity(data);
    }
}

此时,活动BC都已完成,活动堆栈将变为A => D

0

这本来是我期望的解决方案,但它并不起作用。在 Activity D 中调用 finish() 后,我最终只停留在 Activity C 中。 - Sunkas

-1

FLAG_ACTIVITY_CLEAR_TOP 可以清除你的 Activity 栈,你可以像下面的代码一样使用它:

intent = new Intent(this, YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
StartActivity(intent);

谢谢。这太容易了 :) - Sunkas
起初有点困惑你的回答。但在我的情况下,YourActivity是A,并在Activity D的onBackPressed()中调用。 - Sunkas
这样做会导致在我不想要的情况下再次调用活动A的onCreate方法。我希望它显示它所处的状态,类似于单击“返回”时的标准行为。 - Sunkas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接