当前情景
我的应用程序中有一个gridView,每个单元格都是图像和文本的自定义布局。
当用户触摸任何单元格时,它会通过以下代码打开对话
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.show();
现在builder.setView(layout)
中的对象布局具有imageView,文本框和按钮的布局,并通过以下代码设置
layout = inflater.inflate(R.layout.buy_set_quantity, null);
现在,当用户填写文本框并按下按钮时,我希望警报对话框为#34;离开"但我找不到办法做到这一点。
我尝试了什么
我尝试使用builder.dismiss()
,但AlertDialog.Builder
类型对象没有方法解除,以及以下
cancel();
hide();
remove();
finish();
这个问题多次被问到堆栈溢出,并且每个人都说要使用dismiss();
并且没有接受答案或者是否有答案?
如何解雇AlertDialogue.Bulder()
什么有效?
按下后退按钮(从每个机器人屏幕底部的三个按钮)工作,对话框被解除。但事实并非如此。所以我调用了方法onBackPressed();
,但这不仅解除了对话,还让用户接受了之前的活动。
现在有人知道任何新的或不同的实际方法吗?
答案 0 :(得分:2)
您应该拨打create()
以获取对话框,然后关闭对话框。例如:
final Dialog dialog = new AlertDialog.Builder(this)
.setView(layout)
.create();
dialog.show();
// later, when you need to dismiss the dialog
dialog.dismiss();
答案 1 :(得分:0)
您可以创建外部布尔变量并覆盖onBackPressed()
boolean isOpen = false;
void showDialogBuilder()
{
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
isOpen = false;
}
});
isOpen = true;
builder.show();
}
@Override
public void onBackPressed()
{
if(isOpen)
{
isOpen = false;
return;
}
super.onBackPressed();
}