我正在开发一个测验,我需要用户在继续之前回答所有问题。当用户没有回答所有问题时,我会显示一个简单的警报,告知他或她。问题是无论我做什么我都无法关闭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();
答案 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
}
});