AlertDialog.Builder和dismiss方法混淆

时间:2016-06-16 15:56:41

标签: android alertdialog

当前情景

我的应用程序中有一个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();,但这不仅解除了对话,还让用户接受了之前的活动。

现在有人知道任何新的或不同的实际方法吗?

2 个答案:

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