0

当您转到New... > Android Activity时,我正在使用默认LoginActivity当您使用 Android 4.2 SDK 上的 ADT 工具

它包含一个电子邮件字段、密码字段和一个显示“登录或注册”的按钮。当你点击那个按钮时,它会执行一个虚假的异步网络请求,调用一些方法来显示进度条,使用虚拟数据验证用户登录,如果一切都成功,最后会调用:

        @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,我已经看到很多例子使用片段而不是活动来完成这类事情。有关系吗?无论如何,它工作正常,它会打开一个新活动,但我仍然可以按“后退按钮”,它会带我进入登录屏幕。我很确定我在活动下面设置的那些标志是清除历史堆栈所需的,但它不起作用。

如何修复上述代码以清除历史堆栈?换句话说,在我登录后,它应该带我到新活动,如果我按Back,它应该带我到主屏幕

更新

我附上了 LoginActivity、MainActivity、AndroidManifest 的代码。

链接https ://gist.github.com/sahat/5445657

4

2 回答 2

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();
        }

}

于 2013-04-23T18:50:38.030 回答
1

改为使用Intent.FLAG_ACTIVITY_CLEAR_TOP。您正在使用的标志创建一个新任务,但不对堆栈的其余部分做任何事情。此标志将清除所有其他Activities. 如果Activity存在,它将清除其余的,Activities因此MainActivity将位于顶部

FLAG_ACTIVITY_CLEAR_TOP

编辑

如果您想在从下一个按下后返回主屏幕,Activity那么只需finish()在登录Activity时调用登录。这将从您的堆栈中删除登录页面。您还可以指定

android:noHistory="true"

Activity登录屏幕的标签中manifest

于 2013-04-23T16:57:22.877 回答