1

我有一个具有如下启动流程的应用程序:

StartupActivity -> LoginDialog -> LoginActivity -> HomeActivity

当我从 LoginActivity 转到 HomeActivity 时,我调用:

Intent intent = new Intent( this, HomeActivity.class );
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB )
{
    intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK );
}
else
{
    intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP );
}
startActivity( intent );
finish();

On >= API 11,这使得它HomeActivity是一个全新的任务,并且StartupActivity不再在后台堆栈上。

但是,在 上API <= 10,从后面的堆栈中FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP清除了,但仍然存在。如果用户从 中单击返回,则会将他们带回到。LoginActivityStartupActivityHomeActivityStartupActivity

如何从后台堆栈中清除 StartupActivity?

  • 根据我的研究,似乎最好的方法是 startActivityForResult() 但我可以从对话框中做到这一点吗?谁会得到结果?

摘要

  • StartupActivity,我展示LoginDialog
  • LoginDialog,我在LoginActivity不清除后堆栈的情况下转到 。
    • 这是因为我希望用户能够LoginActivityStartupActivity.
  • LoginActivity,我去HomeActivity并清除后面的堆栈
  • 按下返回仍然会回到StartupActivity打开状态devices <= API 10
4

2 回答 2

1

我想出了怎么做...

当 LoginDialog 启动 LoginActivity 时,我可以使用 startActivityForResult() 使 LoginActivity 将结果传回 StartupActivity。如果结果是成功登录,我可以完成 StartupActivity。

LoginDialog 可以从多个地方触发,但如果它是从 StartupActivity 触发的,我可以设置一个标志以便调用 startActivityForResult()。

我坚持的事情是如何使用对话框中的 startActivityForResult 将结果返回到启动对话框的活动中......我想通了。

于 2013-02-14T22:05:09.563 回答
0

在您的 AndroidManifest.xml 文件中添加以下内容

android:noHistory="true"

对于您要从 backstack 中删除的所有活动。您必须将其放在<activity>标签内。

或者,只要您开始一项新活动,就在 StartupActivity 上调用完成。

我建议您使用第一个选项,因为它是正确的方法。

干杯。

看看这个答案 - >答案

于 2013-02-14T02:19:41.967 回答