tangguo

Android:如何在AlertDialog中重写onBackPressed()?

android

我有一个AlertDialog dlgDetails从另一个显示AlertDialog dlgMenu。如果用户按下dlgDetails中的“后退”按钮,我希望能够再次显示dlgMenu,如果他在对话框外按下,则仅退出对话框。

我认为最好的方法是onBackPressed为dlgDetails覆盖,但是我不确定该怎么做,因为必须使用Builder间接创建AlertDialogs。

我正在尝试创建派生的AlertDialog(public class AlertDialogDetails extends AlertDialog { ...}),但是我想我还必须AlertDialog.Builder在该类中进行扩展以返回AlertDialogDetails,但是没有更简单的方法吗?如果没有,您将如何覆盖Builder?


阅读 363

收藏
2020-11-18

共1个答案

小编典典

最后,我在对话框中添加了一个键侦听器,以侦听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 ...)
2020-11-18