Intent - Activity 的 addBackStack(null)

Posted

技术标签:

【中文标题】Intent - Activity 的 addBackStack(null)【英文标题】:Intent - addBackStack(null) for Activity 【发布时间】:2021-04-14 00:02:23 【问题描述】:

我们可以将 addBackStack(null) 与 Fragments 一起使用,这样当我们按下返回时,片段就不会打开。但是我们如何使用 Activity 来做到这一点?我找不到关于那个的用法。 我也试过这个:

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

但这不起作用。

最后addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) 正在工作,但是当我将应用程序带到后台并重新打开它时,这个活动被破坏了。

【问题讨论】:

我假设您在谈论 addToBackStack() 来自 FragmentTransaction。此方法将当前FragmentTransaction 添加到后台堆栈而不是删除它。然后,当您退出另一个Fragment 时,您将返回到后堆栈中的那个。这是您想要实现的目标吗? 我记得当我们将addToBackStack 设置为null 时,必须删除当前片段。但也许我记错了。我解决了这个问题。感谢您的评论。 我不太确定你的问题是什么,这就是我要求澄清的原因。活动会自动添加到后台堆栈,并且不需要额外的标志来工作。在我看来,您想要实现与您所要求的 相反 的内容,即从后台堆栈中 remove 某些内容,而不是像您的问题所暗示的那样添加它。通过完成您的旧Activity,您正在实现这一目标,因此您的解决方案似乎是正确的。 【参考方案1】:

我知道不需要标志。打开其他活动时添加finish()解决了这个问题。

Intent i = new Intent(MainActivity.this, NextActivity.class);
finish();  
startActivity(i);

【讨论】:

以上是关于Intent - Activity 的 addBackStack(null)的主要内容,如果未能解决你的问题,请参考以下文章

Android 中Activity和Intent的详解

activity和Task 有关的 Intent启动方式结合intent.setFlags()

Intent.FLAG_ACTIVITY_CLEAR_TASK 和 Intent.FLAG_ACTIVITY_TASK_ON_HOME 的区别

Activity启动模式及Intent的Flag属性对Intent传值的影响

怎样避免使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK之后的黑屏问题

Intent - Activity 的 addBackStack(null)