我使用默认的 LoginActivity ,当您转到新...> Eclipse 4.2中的Android Activity ,Android 4.2 SDK上的ADT Tools。
它包含一个电子邮件字段,密码字段和一个显示“登录或注册”的按钮。当您单击该按钮时,它会执行虚假的异步网络请求,调用几种方法来显示进度条,使用虚拟数据验证用户登录,以及如果一切都成功则调用的最后一项:
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
//finish();
Intent intent = new Intent(LoginActivity.this, MainActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
} else {
mPasswordView
.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
我注释掉了finish(),而是希望打开一个新的活动窗口,它将成为我的主应用程序窗口(登录状态)。我昨天刚刚开始使用Android,我看到很多例子都使用片段来代替活动。有关系吗?无论如何,它工作正常,它打开一个新的活动,但我仍然可以按“后退按钮”,它将带我登录屏幕。我很确定我在活动下面设置的那些标志是清除历史堆栈所需的,但它不起作用。
如何修复上述代码以清除历史堆栈?换句话说,在我登录后,它应该转到我的新活动,如果我按返回,它应该带我到主屏幕。
我附加了LoginActivity,MainActivity,AndroidManifest。
的代码答案 0 :(得分:1)
请改用Intent.FLAG_ACTIVITY_CLEAR_TOP
。您正在使用的标志创建一个新任务,但不对堆栈的其余部分执行任何操作。此标志将清除所有其他Activities
。如果Activity
存在,则只会清除Activities
的其余部分,以便MainActivity
位于顶部
修改强>
如果您想在从下一个Activity
按回来后转到主屏幕,那么当您登录时,只需在登录finish()
上拨打Activity
。这将删除登录页面从你的堆栈。您也可以指定
android:noHistory="true"
在Activity
manifest
标记中
答案 1 :(得分:1)
试试这个
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class)
startActivity(intent);
finish();
} else {
mPasswordView
.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}