我有一个具有这样的启动流程的应用程序:

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从后堆栈中清除LoginActivity,但是StartupActivity仍然存在。如果用户从HomeActivity单击,它将带他们回到StartupActivity

如何从后堆栈清除StartupActivity?


从我的研究看来,最好的方法似乎是startActivityForResult(),但是我可以通过Dialog来做到这一点吗?谁会得到结果?


摘要:


StartupActivity中,显示LoginDialog
LoginDialog,我进入LoginActivity,而无需清除后堆栈。

这是因为我希望用户能够从LoginActivity返回到StartupActivity

LoginActivity,转到HomeActivity并清除后堆栈
仍按回去可回到StartupActivity上的devices <= API 10

最佳答案

我想出了办法...

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

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

我遇到的问题是如何使用对话框中的startActivityForResult将结果返回到启动该对话框的活动中……我发现了这一点。

关于android - 如何在API <= 10中进入新的 Activity 时清除堆栈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14864917/

10-10 10:15