2

我的应用程序工作如下:

在开始时,我有一些做某事,如果用户登录或以其他方式AppStartActivity完成自身并启动。MainActivityLoginActivity

LoginActivity完成自身并MainActivity在用户成功登录时启动。

MainActivity我有SomeActivity哪个用户可以注销。这种情况的活动堆栈是MainActivity > SomeActivity. 这是正确的,后退按钮效果很好。当用户单击LogOut按钮时出现问题。我需要展示LoginActivity,但我不想再拥有MainActivitySomeActivity在活动堆栈上。

如果我不完成,我可以解决这个问题AppStartActivity。我可以带着标志回去FLAG_ACTIVITY_CLEAR_TOP,它会运作良好。但是这里有一个后退按钮的问题。我不希望用户使用后退按钮返回此活动。我希望它退出应用程序。

更新:

标志最好,但我需要它在 API 级别 9 中工作FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK

4

3 回答 3

1

当用户想要注销时,您只需启动MainActivityIntent.FLAG_ACTIVITY_CLEAR_TOP在其中传递一个额外的Intent参数,告诉MainActivity用户已注销。MainActivity然后可以立即启动LoginActivity并自行完成。

有关如何执行此操作的更多详细信息,请参阅我对从堆栈 android 中删除顶部活动的回答。

于 2013-11-08T21:37:34.183 回答
0

一般技术是使用 aBroadcastReceiver并广播到您的所有活动“嘿,请完成(),因为用户正在注销”。这会清除您的活动堆栈并防止用户回按您应用的“登录”部分。

请参阅注销时,清除 Activity 历史堆栈,防止“返回”按钮打开仅登录的 Activity以获取更多信息。

于 2013-11-08T21:50:16.520 回答
0

如果我理解正确finish(),您似乎只会错过。SomeActivity

这种情况的堆栈是 MainActivity > SomeActivity

点击LogoutButton

onClick(View v)
{
    Intent i = new Intent(SomeActivity.this, LoginActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITIY_CLEAR_TOP);
    startActivity(i);
    finish();
}

这种情况的堆栈是 LoginActivity

点击“返回”Button退出应用

于 2013-11-08T14:33:38.013 回答