10

我正在尝试在我的应用程序中完成我的主菜单。我认为在 OnBackPressed 方法中添加一个 AlertDialog 会很简单。但是由于某种原因,我遇到了各种错误。

我在 OnBackPressed 中创建了 AlertDialog 并显示它,但是当我按下后退按钮时应用程序刚刚关闭,并且我收到错误消息说窗口正在泄漏。

知道如何解决这个问题吗?我搜索了大约 30 分钟,找不到其他有此问题的人。

4

4 回答 4

39

尽量不要调用super.OnBackPressed(),这段代码应该有帮助:

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure you want to exit?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    MyActivity.this.finish();
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
               }
           });
    AlertDialog alert = builder.create();
    alert.show();

}
于 2012-06-06T02:19:52.307 回答
7

如果你想调用 super.onBackPressed() 使用这个代码:

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure you want to exit?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //finish();
                    MyActivity.this.onSuperBackPressed();
                    //super.onBackPressed();
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
    /*
    if (handleCancel()){
        super.onBackPressed();
    }
    */
}

public void onSuperBackPressed(){
    super.onBackPressed();
}

onSuperBackPressed我刚刚向 MyActivity 添加了一个带有super-method的新公共方法。

感谢K_Anas提供了这个绝妙的主意。

于 2016-10-24T19:34:06.977 回答
5

我在 OnBackPressed 中创建了 AlertDialog 并显示它,但是当我按下后退按钮时应用程序刚刚关闭,并且我收到错误消息说窗口正在泄漏。

如果在您OnBackPressed的内部调用super.OnBackPressed(),那么应用程序将完成,因为这就是基本实现的OnBackPressed作用。不要调用该super方法,应用程序不会关闭。

于 2012-06-05T22:43:06.977 回答
0

在对话框中调用 yourActivity.this.onBackPressed()

utility.makeAlertDialog("Cancel Verification","Do you want to cancel the verification process","Cancel Verification",new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
            utility.failureToast("OTP verification");
            Intent intent = new Intent(MobileOTPActivity.this,MobileNumberLoginActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            finish();
            MobileOTPActivity.this.onBackPressed();
        }
    },"Close");
于 2018-06-23T15:36:10.050 回答