【问题标题】:Back button restarts previus activity even after clearing activity stack即使在清除活动堆栈后,后退按钮也会重新启动上一个活动
【发布时间】:2015-08-08 21:54:18
【问题描述】:

我正在制作一个用户可以通过单击注销按钮注销的应用程序。在注销之前,用户在活动 A 中,然后他单击导航抽屉中的 ogout 按钮,这会将他带到活动 B(登录屏幕活动)。现在在这里,如果我单击后退按钮,即使我正在通过以下代码清除活动堆栈,活动 A 也会重新出现,

Intent intent = new Intent(curr_context, Activity_B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
finish();

同样在Activity B(登录活动)我有以下代码,

public void onBackPressed() {
        if (backPressedToExitOnce) {
            super.onBackPressed();
        } else {
            this.backPressedToExitOnce = true;
            Toast.makeText(curr_context, "Press again to exit", Toast.LENGTH_LONG).show();
            new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    backPressedToExitOnce = false;
                }
            }, 2000);
        }
    }

我真的不知道我错在哪里。任何帮助,将不胜感激。提前致谢!!

【问题讨论】:

  • 如果有登录用户,您的活动 B 中是否有任何代码可以启动活动 A?还是用户每次都应登录该应用程序?

标签: android android-lifecycle activity-lifecycle onbackpressed


【解决方案1】:

只需使用

finish();

我认为这可以解决问题 我有同样的问题 告诉我它是否有效

【讨论】:

  • 谢谢回复,但我应该在哪里使用它?
  • 而不是“backPressedToExitOnce = false;”是:D
  • 对不起,伙计,但这没有任何区别:(
【解决方案2】:

当您从 Activity B 启动 Activity A 时,您是否在 StartActivity 之后调用了“finish()”?

ActivityB 中的示例:

Intent intentActivityA= new Intent(getApplicationContext(),ActivityA.class);    
startActivity(intentActivityA);
finish();

这将在启动 Activity A 后立即终止 ActivityB,当您使用 ActivityA 的后退按钮时,它应该会自动终止应用程序,因为 ActivityB 已经完成。

【讨论】:

  • 谢谢回复,是的,我也在那里使用了finish()!
  • 您是否尝试过使用“getApplicationContext()”而不是缓存的 curr_context,并且清单是否包含 activityA 的“parentActivityName”
【解决方案3】:

Activty_A 启动finish(); 后调用Activity_B
您在 Intent 中设置的标志会为 B 活动创建一个新任务,但不会为您关闭 A。

【讨论】:

  • thnx,但我想我已经在这样做了。请查看代码的意图部分。
【解决方案4】:

你可以在活动A中添加这个:

// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

通过这种方式,当您单击返回按钮时,它会将您带到启动器而不是活动 B

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多