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

新手上路,请多包涵

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

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

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

原文由 Pooks 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 664
2 个回答

我终于在我的对话框中添加了一个按键监听器来监听返回键。不如覆盖 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 ...)

有关 Kotlin 中的答案,请参见此处: Not working onbackpressed when setcancelable of alertdialog is false

原文由 Pooks 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

          accountDialog = builder.create();

        accountDialog.setOnCancelListener(new OnCancelListener() {

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

            }
        });

原文由 Lettings Mall 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题