【问题标题】:pressing back button two times closes activity按两次后退按钮关闭活动
【发布时间】:2014-05-29 19:23:57
【问题描述】:

我有一个奇怪的问题。我有一个具有两个活动“登录”和“正常难度”的应用程序。当我在登录活动中并按下返回按钮时,它会优雅地关闭活动。但是当我处于“normalDifficulty”并按下后退按钮时,它会重新启动我的“normalDifficulty”。要关闭“normalDifficulty”活动,我必须按两次后退按钮。无论我做什么,按两次后它总是关闭“normalDifficulty”。请帮助我为什么会发生这种情况以及如何解决这个问题。下面的代码我用来关闭活动。

 @Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
        .setTitle("Are you sure you want to exit?")
        .setNegativeButton(android.R.string.no, null)
        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener()     {

            public void onClick(DialogInterface arg0, int arg1) {
                finish();
            }
        }).create().show();
}

我通过 super.finish()、this.finish()、NormalDifficulty.finish() 修改了这个。但是我的活动总是在按两次后关闭。谢谢。

我开始 NormalDifficulty 活动的代码。这发生在我声明 NormalDifficulty 保护的登录活动中。

 enter.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            boolean userNameStatus, emailStatus;
            userNameStatus = validate(userName.getText().toString(), USERNAME_PATTERN);
            emailStatus = validate(email.getText().toString(), EMAIL_PATTERN);
            if(userNameStatus && emailStatus) {
                if(rememberMe.isChecked()) {
                    SharedPreferences settings = getSharedPreferences(
                            PREFRENCES_NAME, Context.MODE_PRIVATE);
                    settings.edit().putString("name", userName.getText().toString())
                            .putString("pwd", email.getText().toString()).commit();
                } else {
                    SharedPreferences settings = getSharedPreferences(
                            PREFRENCES_NAME, Context.MODE_PRIVATE);
                    settings.edit().clear().commit();
                }
            } else {
                showDialog("Invalid UserName or Email-ID");
                return true;
            }

            message = userName.getText().toString();
            startActivity(normalDiffculty);
            finish();
            return true;
        }
    });

【问题讨论】:

  • 请将代码放在您打开正常难度活动的位置。
  • 尝试将finsh()改为super.onBackPressed();

标签: android android-activity


【解决方案1】:

检查this

你可以像这样添加setCancelable(false)

new AlertDialog.Builder(this)
    .setTitle("Are you sure you want to exit?")
    .setCancelable(false).
    .setNegativeButton(android.R.string.no, null)
    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener()     {

        public void onClick(DialogInterface arg0, int arg1) {
            finish();
        }
    }).create().show();

这将防止在显示对话框后单击返回时关闭对话框,并且您可以在 YESonClick 中调用活动的finish()。并在NOonClick正常延续。

希望对你有帮助。

【讨论】:

  • 没有帮助。由于它重新启动应用程序,因此对话框关闭。我做了一些工作,我覆盖了 onRestart() 方法并在其中调用了 finsish() ,所以当应用程序在按下返回按钮后重新启动时,它会关闭应用程序。但这样做会产生异常,然后关闭应用程序。谢谢
  • 我从 system.exit(0) 替换了 finsish() ,即使它不会通过按一次后退按钮退出。我仍然必须按两次后退按钮才能关闭应用程序。
  • 尝试使用“android.os.Process.killProcess(android.os.Process.myPid());”但即使我的应用程序以不同的 PID 值重新启动。我仍然必须按两次后退按钮才能关闭它。我在模拟器中运行应用程序,可能是因为这个?
  • 可能是@user3687223 ry with device。
  • NO 它仍然在模拟器中提供相同的行为。我订购了新的 andorid 移动设备。一旦我的应用程序在设备中成功执行,我将更新您。
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多