AlertDialog中的onClick()方法未被调用

时间:2017-12-27 03:49:53

标签: android onclick onclicklistener android-alertdialog

我正在创建一个自定义对话框,其中包含一个图形,一些我使用setMessage()动态修改的文本和一个标有' OK'的按钮,当按下时,应该解雇对话并做一些家务。我的代码如下所示:

        // Shows the number of letters correct in the current guess.
    wdsBuilder = new AlertDialog.Builder(this);
    inflater = this.getLayoutInflater();
    dialogView = inflater.inflate(R.layout.box_dialog3, null);
    dialogView.setBackgroundColor(Color.TRANSPARENT);
    alertTextView = (TextView)dialogView.findViewById(R.id.text);

    wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int whichButton) {
            wdsAlert.dismiss();
            if (playTimer != null) playTimer.cancel();
        }
    });
    wdsAlert = wdsBuilder.create();

非常标准;事实上,我几乎逐字逐句地提起它https://developer.android.com/guide/topics/ui/dialogs.html。对话框显示正确,当我按“确定”时它被解雇了,但是当我在wdsAlert.dismiss()放置一个断点时,断点没有被击中。任何人都知道发生了什么?

6 个答案:

答案 0 :(得分:1)

您可以写dialog.dismiss();而不是wdsAlert.dismiss();

答案 1 :(得分:0)

如果要在点击时关闭对话框,请尝试此操作:

wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int whichButton) {
           dialog.dismiss();
        }
    });

答案 2 :(得分:0)

您无需点击按钮即可拨打Component。它的AlertDialog的默认行为。使用如下,并检查。

dismiss()

如果您不想忽略onClick的PositiveButton上的对话框,则需要覆盖其行为。请查看This thread

答案 3 :(得分:0)

如果breackPoint不起作用,请尝试清理项目,但这是我的Dialog对我有用:

 final Dialog dialogAnomalias;
            dialogAnomalias = new Dialog(MainActivity.this);
            dialogAnomalias.setContentView(R.layout.content_main);
            dialogAnomalias.setTitle("Captura");
            dialogAnomalias.setCancelable(false);

            WindowManager.LayoutParams lp = setDialogLayoutParams(dialogAnomalias);

            lecturaAnomalia = (EditText) dialogAnomalias.findViewById(R.id.etLectura);
            comentariosAnomalia = (EditText) dialogAnomalias.findViewById(R.id.etObservaciones);


            Button btnAceptar = (Button) dialogAnomalias.findViewById(R.id.btnAceptar);
            Button btnCancelar = (Button) dialogAnomalias.findViewById(R.id.btnCancelar);
            btnAceptar.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                }
            });
            btnCancelar.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                    dialogAnomalias.dismiss();
                }
            });
            dialogAnomalias.show();
            dialogAnomalias.getWindow().setAttributes(lp);

和对话框的这种方法:

public WindowManager.LayoutParams setDialogLayoutParams(Dialog dialog) {
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(dialog.getWindow().getAttributes());
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    return lp;
}

答案 4 :(得分:0)

感谢您的所有建议,但我找到了一种不需要处理点击事件的解决方法。

刚才,我偶然发现了解决方案:在代码的其他地方,我在构建器上调用了setButton(),这是按下按钮,而不是调用setPositiveButton()。

答案 5 :(得分:0)

你必须使用

    wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 

@Override public void onClick(DialogInterface dialog, int whichButton) { 

dialog.dismiss(); 

if (playTimer != null) playTimer.cancel(); 

} });

不是

wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 

    @Override public void onClick(DialogInterface dialog, int whichButton) { 

    wdsAlert.dismiss(); 

    if (playTimer != null) playTimer.cancel(); 

    } });

因为你将它作为参数传递给onClick函数 ....

如果您对此类错误感到震惊,请使用烤面包或小吃店来跟踪错误