如何closuresAndroid alertdialog

我正在开发一个测验,我需要用户在继续之前回答所有问题。 当用户没有回答所有问题时,我会显示一个简单的alertdialog通知他或她。 问题是无论我做什么我都不能让alertdialogclosures。 为什么不是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(); 

Solutions Collecting From Web of "如何closuresAndroid alertdialog"

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

这是一个方便的类来帮助你创build一个对话框 ,有没有访问这些方法。

这里是一个例子:

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

您可以在警报上调用alert.cancel()方法(而不是构build器)

尝试使用

dialog.dismiss()

而不是使用

dialog.cancel()

把这一行放在OnCreate()

 Context mcontext=this; 

他们在下面的代码中使用这个variables

 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(); 

试试这个代码..它正在运行成功..

使用setNegativebutton,不需要Positivebutton! 我保证你会赢得x

 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(); 

回复一个旧post,但希望有人可能会觉得这有用。 做这个,而不是

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

你可以继续做,

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

上面的代码工作,但要确保你alert一个全局variables,所以你可以在onClick方法。

我会尝试把一个

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

在你的代码中的dialog.dismiss()行之前,看看它是否真的到达那个部分。

使用对话框而不是AlertDialog

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

如果您想要自定义对话框,我推荐使用对话框。

 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(); } 

您可以简单地重新启动您的alertdialog出现或其他活动取决于您的判断的活动。 如果你想重新开始活动,使用finish(); startActivity(getIntent());

 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(); } }); 

我尝试了PowerAktar的解决scheme,但AlertDialog和Builder始终保持单独的部分。 那么如何获得“真正的”AlertDialog?

我在show-Dialog中find了我的解决scheme:你写的

 ad.show(); 

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

 AlertDialog adTrueDialog; adTrueDialog = ad.show(); 

有了这个adTrueDialog,可以取消()…

 adTrueDialog.cancel() 

或者在对话框中执行button命令:

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

如果你已经使用了正面和负面的button(就像我在我的项目中),你可以使用中性button来closures对话框。

我还注意到,在Android版本> 5时,通过单击对话窗口之外的对话框closures,但在旧版本中,这不会发生。

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