【问题标题】:AlertDialog...no OK button, only CancelAlertDialog...没有确定按钮,只有取消
【发布时间】:2013-03-08 04:09:34
【问题描述】:

我想显示一个带有确定和取消按钮的警报对话框,但我只得到取消。当我注释掉取消按钮时,我会得到确定按钮。诡异的。无论如何,这是代码:

final AlertDialog ukucajIme = new AlertDialog.Builder(Kviz.this).create();
            ukucajIme.setTitle("Insert your name");
            final EditText input = new EditText(Kviz.this);

            ukucajIme.setView(input);

            ukucajIme.setButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                  Editable ukucanoIme = input.getText();
                  finish();
                  }
                });
            ukucajIme.setButton("Cancel", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int whichButton) {
                     ukucajIme.dismiss();
                     finish();
                  }
                  });
            ukucajIme.show();

第二个问题:每当我尝试使用类似 ukucajIme.setPositiveButton 的东西时,它都会给我一个错误,并说将其更改为 setButton。这是为什么呢?

【问题讨论】:

  • 你调用 .create() 太早了。按照下面的答案,然后创建您的 AlertDialog

标签: java android


【解决方案1】:

尝试像这样在 AlertDialogBu​​ilder 上使用 setPositiveButton()setNegativeButton() 方法

AlertDialog.Builder builder = new AlertDialog.Builder(Kviz.this);

builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
    Editable ukucanoIme = input.getText();
    finish();
});


builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
         dialog.dismiss();
         finish();
         dialog.cancel();
    }
});

AlertDialog dialog = builder.create();

【讨论】:

  • 公平地说,我从来没有说过他们打算在实际对话实例上被调用,我会更新我的答案:)
  • dismiss(); 出现错误。将演员表添加到“builder”......(我改变了它,你忘了,它仍然是我的 ukucajIme)。当我添加演员表时,警报窗口不会显示。
  • 啊,这是有道理的,我只是从实际的事件处理程序中复制了您的代码:) 将其更改为适当的实例名称(顺便说一句,您不应该在构建器上调用驳回,如果那是您的话的意思)。另一个注意事项,你不应该在同一个块中同时调用dismiss和cancel。选择一个 -> stackoverflow.com/questions/3125647/…
  • 您编辑的代码没有任何反应,警告窗口永远不会弹出。我已经插入了 builder.show();但我的编辑框不见了。好的,这开始变得奇怪了。
  • 现在可以了。有一些修正。我将在下面发布完整的代码。如果其他人有这个问题。谢谢
【解决方案2】:

警报对话框不包含 setNegativeButton 或 setPositiveButton。而是使用:

ukucajIme.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
    Editable ukucanoIme = input.getText();
    finish();
});


ukucajIme.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
     ukucajIme.dismiss();
     finish();
});

【讨论】:

  • +1 直接回答作者的第二个问题,setPositiveButton()(等)是AlertDialog.Builder中的方法。
【解决方案3】:

这样使用。

使用两个按钮创建警报对话框。 setPositiveButton() 用于在警告对话框中创建一个肯定按钮,setNegativeButton() 用于调用否定按钮来警告对话框。

AlertDialog.Builder alertDialog = new AlertDialog.Builder(Kviz.this);
ukucajIme.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
       Editable ukucanoIme = input.getText();
       finish();
    }
});

// Setting Negative "Cancel" Button
ukucajIme.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        finish();
        dialog.cancel();
    }
});

ukucajIme.show();  // Showing Alert Message

【讨论】:

  • ukucajIme 是一个 AlertDialog,而不是一个 AlertDialog.Builder,所以它没有这些方法。
【解决方案4】:

好的,这是完整的代码。我只是更改了一些变量。

AlertDialog.Builder builder = new AlertDialog.Builder(Kviz.this);
                     builder.setTitle("Ukucaj svoje ime");
                     final EditText input = new EditText(Kviz.this);
                     builder.setView(input);

                     builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog,int which) {
                         Editable ukucanoIme = input.getText();
                         finish();
                     }
                     });


                     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int which) {
                              dialog.dismiss();
                              finish();
                         }
                     });
                     builder.show();
                     AlertDialog dialog = builder.create();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2013-06-15
    • 2011-11-07
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多