如何关闭Android alertdialog

时间:2010-12-02 15:13:57

标签: android

我正在开发一个测验,我需要用户在继续之前回答所有问题。当用户没有回答所有问题时,我会显示一个简单的警报,告知他或她。问题是无论我做什么我都无法关闭alertdialog。为什么dialog.cancel不工作?`这是代码:

AlertDialog.Builder ad = new AlertDialog.Builder(this);  
ad.setTitle("Unanswered Questions");  
ad.setMessage("You have not answered all the questions.");   
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {  
   public void onClick(DialogInterface dialog, int id) {  
     dialog.cancel(); 
}  
});  
ad.show(); 

15 个答案:

答案 0 :(得分:73)

AlertDialog.Builder本身不包含dismiss()cancel()方法。

这是一个方便的类,可以帮助您创建一个对话框, DOES 可以访问这些方法。

以下是一个例子:

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

AlertDialog alert = builder.create();

alert.show();

然后,您可以在警报(而不是构建器)上调用alert.cancel()方法。

答案 1 :(得分:29)

尝试使用

dialog.dismiss()

而不是使用

dialog.cancel()

答案 2 :(得分:8)

将此行放在OnCreate()

Context mcontext=this;    

他们在以下代码中使用此变量

final AlertDialog.Builder alert = new AlertDialog.Builder(
                                mcontext);
                        alert.setTitle(title);
                        alert.setMessage(description);
                        alert.setPositiveButton("Ok",
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        dialog.cancel();
                                    }
                                });
                        alert.show();

尝试此代码..它已成功运行..

答案 3 :(得分:8)

使用setNegative按钮,不需要正面按钮!我保证你会赢得x

答案 4 :(得分:5)

AlertDialog.Builder ad = new AlertDialog.Builder(this);  
ad.setTitle("Unanswered Questions");  
ad.setMessage("You have not answered all the questions.");   
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {  
   public void onClick(DialogInterface dialog, int id) {  
     dialog.dismiss(); 
}  
});  
ad.show(); 

答案 5 :(得分:4)

回复旧帖子,但希望有人可能会觉得这很有用。这样做

final AlertDialog builder = new AlertDialog.Builder(getActivity()).create();

然后你可以继续做,

builder.dismiss();

答案 6 :(得分:2)

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
AlertDialog alert = builder.create(); 
alert.show();

上面的代码有效,但请确保将alert设为全局变量,以便从onClick方法中获取它。

答案 7 :(得分:1)

我会尝试放一个

Log.e("SOMETAG", "dialog button was clicked");

在代码中的dialog.dismiss()行之前,看看它是否实际到达该部分。

答案 8 :(得分:1)

使用Dialog而不是AlertDialog

AlertDialog没有dismiss()但是AlertDialog有一些像setPositiveButton()这样的按钮的方法。

如果您想要自定义对话框,我建议使用Dialog。

答案 9 :(得分:0)

final AlertDialog.Builder alert = new AlertDialog.Builder(mcontext);
alert.setTitle(title);
alert.setMessage(description);
alert.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
  @Override                                 
  public void onClick(DialogInterface dialog,int which) {
        cancelDialog(); //Implement method for canceling dialog
         }
   });
alert.show();
void cancelDialog()
{
   //Now you can either use  
   dialog.cancel();
    //or dialog.dismiss();
}

答案 10 :(得分:0)

您只需重新启动您的alertdialog出现的活动或其他活动取决于您的判断。 如果要重新启动活动 用这个 完(); startActivity(getIntent());

答案 11 :(得分:0)

alertDialog.setPositiveButton("SAVE",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        /*Write your code here */
                        dialog.dismiss();
                    }
                });
        alertDialog.setNegativeButton("CANCEL",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();

                    }
                });

答案 12 :(得分:0)

我尝试了PowerAktar的解决方案,但AlertDialog和Builder始终保持独立的部分。那么如何获得真实的" AlertDialog?

我在show-Dialog中找到了我的解决方案:你写了

ad.show();

显示对话框。在show的帮助下,它说"使用提供给此构建器的参数创建一个AlertDialog,并在Dialog.show()中创建对话框。"所以最终在这里创建了对话框。 show() - Command的结果是AlertDialog本身。所以你可以使用这个结果:

AlertDialog adTrueDialog;
adTrueDialog = ad.show();

使用此adTrueDialog可以取消()...

adTrueDialog.cancel()

或在对话框中执行按钮命令:

Button buttonPositive = adTrueDialog.getButton(Dialog.BUTTON_POSITIVE);
buttonPositive.performClick();

答案 13 :(得分:0)

以防万一有人在寻找Kotlin版本的情况,如下所示:

alertDialog.setPositiveButton(resources.getString(R.string.split_okay)) { 
    dialog, _ ->
        dialog.dismiss()
}

答案 14 :(得分:-2)

如果你已经使用正面和负面按钮(就像我在我的项目中那样),你可以使用中性按钮关闭对话框。

我还注意到,在Android版本> 5中,通过单击对话框窗口外部关闭对话框,但在较旧版本中,这不会发生。

ad.setNeutralButton("CLOSE", new DialogInterface.OnClickListener(){
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // close dialog
    }
});