关闭自定义对话框?

9

我正在尝试制作一个自定义对话框,以在该对话框中显示视图。以下是构建器代码:

//Getting the layout
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog_simple,
                               (ViewGroup) findViewById(R.id.rlDialogSimple));

//Change Text and on click
TextView tvDialogSimple = (TextView) layout.findViewById(R.id.tvDialogSimple);
tvDialogSimple.setText(R.string.avisoComprobar);
Button btDialogSimple = (Button) layout.findViewById(R.id.btDialogSimple);
btDialogSimple.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        //Do some stuff

        //Here i want to close the dialog
    }
});

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

所以,我希望在btDialogSimple的onClick中关闭对话框。我该怎么做?我不知道如何从onclicklistener内部调用dismiss方法。

我的按钮有自定义布局,所以我不想使用builder.setPositiveButton。

有什么想法吗?


很好的问题!这似乎正是它应该工作的方式。但当然,它并不是这样——那只会太容易了!(这不是 Android 的方式)。 - SMBiggs
4个回答

17

你需要将AlertDialog保存到你的父类属性中,然后使用类似以下的方式:

class parentClass ........ {
private AlertDialog alert=null;
........
public void onClick(View v) {
        //Do some stuff

        //Here i want to close the dialog
        if (parentClass.this.alert!=null)            
        parentClass.this.alert.dismiss();
    }
........
this.alert = builder.create();
this.alert.show();

}


请注意,这是一个段落标记,其中包含了单个字符 "}"。

我也试过了,可以用。但是由于我有一个作为XML文件构建的自定义对话框,所以我不需要构建它,只需使用setContentView(custom_dialog)即可。 - SMBiggs
@pentium10... 我遇到了同样的问题,但是它对我不起作用。 - DJhon

7

我认为一个更好的方法可能是调用

dismissDialog(DIALOG_ID);

“将AlertDialog作为类属性是否会违反从onCreateDialog()返回对话框的目的?”

0

我正在使用

public  Dialog dialog;

buton_sil.setOnClickListener(new View.OnClickListener() {

            @ Override
            public void onClick(View v) {

                   DialogClose();
                   }
}):


public void DialogClose() {
        dialog.dismiss();
    }

0

使用AlertDialog实例,例如全局变量mAlertDialog。并在onClick()内调用mAlertDialog.dismiss();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接