java - 使用标志 Intent.FLAG_ACTIVITY_NEW_TASK 从 onPostExecute() 方法启动 Intent 不起作用

标签 java android android-activity

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

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

        @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(),而是想打开一个新的 Activity 窗口,该窗口将是我的主应用程序窗口(已登录状态)。我昨天刚开始使用 Android,我看到很多示例使用 fragment 而不是 Activity 来完成此类事情。有关系吗?不管怎样,它工作得很好,它打开了一个新的 Activity ,但我仍然可以按“后退按钮”,它会带我登录屏幕。我很确定我在 Activity 下面设置的那些标志是清除历史堆栈所需的,但它不起作用。

如何修复上面的代码以清除历史堆栈?换句话说,登录后,它应该将我带到新的 Activity ,如果我按返回,它应该将我带到主屏幕

更新

我已附加 LoginActivity、MainActivity、AndroidManifest 的代码。

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

最佳答案

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

FLAG_ACTIVITY_CLEAR_TOP

编辑

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

android:noHistory="true"

manifest 中登录屏幕的 Activity 标记中

关于java - 使用标志 Intent.FLAG_ACTIVITY_NEW_TASK 从 onPostExecute() 方法启动 Intent 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174988/

相关文章:

java - 使用PrepareCall方法将参数传递给函数并返回计数值

java - 有什么办法可以代替动态方法吗?

java - 从圆环图中获取系列 - achartengine

android - flutter 图表 : display value above each point

android - Google Play 结算库 2.0.2 示例

java - 如何从另一个 Activity 访问数据?

java - String.getBytes ("UTF-32") 在 JVM 和 Dalvik VM 上返回不同的结果

安卓和 iOS : How to handle dependencies when building an SDK

Android:设置应用内结算以打开新的 Activity 类

android - 旧 java 项目中的新 kotlin 文件 - 'Unresolved reference' R