0

我的应用程序上有一个登录屏幕,现在您可以按返回按钮返回登录屏幕。我不希望这种情况发生。

用户登录后,应用程序应停止登录活动,以便用户无法返回。在菜单屏幕上,我有一个注销按钮,我想在已停止登录活动后使用该按钮重新启动登录活动。

我一直在寻找和测试一个小时左右,但我找不到答案。

4

5 回答 5

1

noHistory = true清单中为您的登录活动设置。这可以防止活动被存储在后台堆栈中。

于 2012-09-05T20:00:41.393 回答
0

成功登录后,您可以调用Actvity.finish().

要重新启动登录活动,请使用Activity.startActivity(intent).

于 2012-09-05T18:45:12.897 回答
0

尝试:

在您的登录活动中登录成功后,在启动下一个活动后对该活动调用 finish()。这将有效地破坏登录活动并将其从活动返回堆栈中删除(因此无法再导航到它)。就像是:

onLoginComplete(){
    startActivity(new Intent(this, NextActivity.class));
    finish();
}

或者,在登录活动的 onResume 中检查登录状态,如果为真,则完成。这样,每当用户进入此活动时,如果他们已经登录,它将被关闭(并且他们永远不会真正看到它)。例如:

@Override
public void onResume(){
    super.onResume();
    if(isLoggedIn())
        finish();
}
于 2012-09-05T18:47:13.793 回答
0

当您成功登录后离开登录屏幕时,调用finish()此命令将从堆栈中删除您的活动。

您的注销按钮应重新调用登录页面,如下所示:

Intent intent = new Intent(TheCurrentActivity.this, YourLoginScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

这将加载登录屏幕并清除当前活动堆栈,确保您在注销后无法返回。

于 2012-09-05T18:47:53.190 回答
0

如果您不希望用户能够返回登录活动,只需将其从最近的堆栈中排除,方法是在应用程序清单属性中添加您的活动声明android:excludeFromRecents,如下所示:

<activity android:name=".Login" android:excludeFromRecents="true"></activity>

然后,一旦您的登录活动完成它的任务,您(很可能)将进入您的应用程序的下一个活动。一旦你调用startActivity()启动新的,只需调用finish();完成登录活动:

...
startActivity( intentToLaunchNextActivity );
finish();
于 2012-09-05T19:29:45.153 回答