必须在onClick中调用dismiss()吗?
如果我没有调用dismiss(),对话框仍然可以关闭。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    Bundle args = getArguments();
    if (args.containsKey(ARG_MESSAGE_INT)) {
        builder.setMessage(args.getInt(ARG_MESSAGE_INT));
    } else if (args.containsKey(ARG_MESSAGE_STRING)) {
        builder.setMessage(args.getString(ARG_MESSAGE_STRING));
    }
    if (args.containsKey(ARG_TITLE_INT)) {
        builder.setTitle(args.getInt(ARG_TITLE_INT));
    } else if (args.containsKey(ARG_TITLE_STRING)) {
        builder.setTitle(args.getString(ARG_TITLE_STRING));
    }

     builder
            .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            if (null != buttonOnClickListener)
                                buttonOnClickListener.onPositiveClick();
                        }
                    }
            )
            .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            if (null != buttonOnClickListener)
                                buttonOnClickListener.onNegativeClick();
                        }
                    }
            );

    return builder.create();
}

最佳答案

如果使用构建器创建对话框并在其中设置您的侦听器,则单击任何按钮将自动关闭该对话框,您无需调用dismiss。

如果您覆盖了Click侦听器以防止对话框自动关闭(可能是因为您想要在放开对话框之前验证一些数据),则需要调用dismiss。为此,您将在onStart中覆盖单击侦听器。

10-04 19:59