Android:如何在AlertDialog中覆盖onBackPressed()?

Poo*_*oks 22 android overriding android-dialog

我有一个AlertDialog dlgDetails从另一个显示AlertDialog dlgMenu.如果用户按下dlgDetails中的后退按钮,我希望能够再次显示dlgMenu,如果他按下对话框,则只需退出对话框.

我认为最好的方法是覆盖onBackPresseddlgDetails,但我不知道如何做到这一点,因为必须使用Builder间接创建AlertDialogs.

我试图创建一个派生的AlertDialog(public class AlertDialogDetails extends AlertDialog { ...}),但我想我还必须AlertDialog.Builder在该类中扩展以返回一个AlertDialogDetails,但是有没有更简单的方法?如果没有,你会如何重写生成器?

Poo*_*oks 59

我终于在对话框中添加了一个关键监听器来监听Back键.不像重写那样优雅,onBackPressed()但它有效.这是代码:

dlgDetails = new AlertDialog.Builder(this)
    .setOnKeyListener(new DialogInterface.OnKeyListener() {
        @Override
        public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && 
                event.getAction() == KeyEvent.ACTION_UP && 
                !event.isCanceled()) {
                dialog.cancel();
                showDialog(DIALOG_MENU);
                return true;
            }
            return false;
        }
    })
    //(Rest of the .stuff ...)
Run Code Online (Sandbox Code Playgroud)


Let*_*all 5

找到一个更短的解决方案:)试试这个

         accountDialog = builder.create();

        accountDialog.setOnCancelListener(new OnCancelListener() {

            @Override
            public void onCancel(DialogInterface dialog) {
                dialog.dismiss();
                activity.finish();

            }
        });
Run Code Online (Sandbox Code Playgroud)