我有一个具有这样的启动流程的应用程序:
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/