Android中的是/否警报对话框

Sen*_*nps 3 android

我想在onBackPressed()事件中在android中显示一个警告对话框

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {

    //@Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which){
        case DialogInterface.BUTTON_POSITIVE:
            //Yes button clicked
            break;

        case DialogInterface.BUTTON_NEGATIVE:
            //No button clicked
            break;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

但是我在onBackPressed()事件中执行它时遇到错误

@Override
public void onBackPressed() {
    super.onBackPressed();  
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
        .setNegativeButton("No", dialogClickListener).show();

}
Run Code Online (Sandbox Code Playgroud)

错误:" com.java.mypkg泄漏了最初添加的窗口com.android.internal.policy.impl.PhoneWindow$DecorView@406c3798 "

我错过了什么吗?请帮忙.

Pra*_*mar 7

是的,不要按照之前用户的响应调用它.super.onBackPressed();onStop活动的方法.而不是onBackPressed();你可以onKeyDown用于您的要求.如果您需要AlertDialog在按下后退按钮时打开,您可以使用KeyEvent进行尝试

例如 -

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub

    switch(keyCode)
    {
    case KeyEvent.KEYCODE_BACK:
        AlertDialog.Builder ab = new AlertDialog.Builder(AlertDialogExampleActivity.this);
        ab.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
        .setNegativeButton("No", dialogClickListener).show();
        break;
    }

    return super.onKeyDown(keyCode, event);
}

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which){
        case DialogInterface.BUTTON_POSITIVE:
            //Yes button clicked
            break;

        case DialogInterface.BUTTON_NEGATIVE:
            //No button clicked
            break;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

当您覆盖onKeyDown方法时,它将使用您的KEYCODE_BACK检测返回键

希望这对你有所帮助.


jee*_*eet 2

不要调用,super.onBackPressed(); 因为它将调用活动的 onStop 方法。

并且在已完成的活动上显示对话框将泄漏窗口。