Android清除活动之间的返回栈

5
我有4个活动:Activity A -> activity B -> Activity C -> activity D,我想要实现的是从D返回A并清除B和C。这可能吗?如何实现?
非常感谢。

你想要在后台堆栈中永远不再有B和C活动吗? - miljon
https://dev59.com/Mmct5IYBdhLWcg3wF5pF - Quick learner
如果您永远不会从D返回B和C,请不要将B和C保存在后退堆栈中,这样,当您在D中按下后退键时,您将直接跳转到A。您是否需要返回B或C?如果不需要,我可以为您提供解决方案。 - JonZarate
3个回答

8
如果正在启动的活动已经在当前任务中运行,则不会启动该活动的新实例,而是将其上面的所有其他活动关闭,并将此意图作为新意图传递给(现在位于顶部的)旧活动。
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Read more here.


0
如果活动的顺序是固定的(A=>B=>C=>D=>A),那么在启动活动C之前,您需要调用B的finish方法,并且在启动Activity D时调用C的finish方法。
startActivityC() 
{
    Intent intent = new Intent(this, C.class);
    ActivityB.this.finish()
    startActivity(intent);
}

从活动D返回到启动活动A,您可以重写ActivityD的onBack方法来启动Activity A。

@Override
onBack()
{

    Intent intent = new Intent(this, A.class);

    ActivityD.this.finish()
    startActivity(intent);
}

在我看来,这种方法一点也不优雅。 - JonZarate

0
如果您的流程始終遵循A => B => C => D => A,則只需避免在後堆棧中保存B和C。這樣,當您從D返回時,唯一可用的Activity是A。
啟動活動B和C的代碼:
Intent i = new Intent(...);
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); // <= Don't save in back stack
startActivity(i);

启动Activity A & D的代码:

Intent i = new Intent(...);
startActivity(i);

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