如何从另一个方法中删除对话框

时间:2011-04-06 03:27:18

标签: android

我创建了一个对话框,可以通过提供标题和消息从任何地方调用,如下所示:

public void alertbox(String title, String mymessage)
{   new AlertDialog.Builder(this)
        .setTitle(title)
        .setMessage(mymessage)
        .setNeutralButton(android.R.string.cancel,
                new DialogInterface.OnClickListener() 
                {   public void onClick(DialogInterface dialog, int whichButton) {}
                })
        .show();
}

但是当我尝试从另一个方法中解除对话框时,我得到了一个锁定:

private void doCheck() {
    alertbox("status", getString(R.string.checking_license));
    mChecker.checkAccess(mLicenseCheckerCallback);

    alertbox.dismiss();
} 

是alertbox.dismiss();导致崩溃的声明。任何想法如何正确地做到这一点?

3 个答案:

答案 0 :(得分:4)

可以像调用runOnUiThread一样简单:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        alertbox.dismiss();
    }
});

如果你在错误的线程上。虽然您有其他详细信息,但问题更简单。放弃妙语:

public AlertDialog alertbox(String title, String mymessage) {   
    return new AlertDialog.Builder(this)
        .setTitle(title)
        .setMessage(mymessage)
        .setNeutralButton(android.R.string.cancel,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {}
            })
        .show();
}

private void doCheck() {
    AlertDialog alert = alertbox("status", getString(R.string.checking_license));
    mChecker.checkAccess(mLicenseCheckerCallback);
    alert.dismiss();
}

虽然您可能不希望同一方法中显示和关闭对话框。您是否看到上述代码至少保存了对话框的引用,以便您以后可以将其解除?

答案 1 :(得分:3)

我也遇到过这个问题,并希望与选择不使用上述方法的人分享我的问题。

首先,我将AlertDialog与类变量一起定义:

private AlertDialog alertbox;

然后我在任何需要的地方定义AlertDialog:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("title");
builder.setMessage("message");

alertbox = builder.create();
alertbox.show();

最后,由于将AlertDialog定义为实例变量,我可以通过类中的任何方法关闭AlertDialog。

private void dismissAlert()
{
    alertbox.dismiss()
}

答案 2 :(得分:1)

我会让alertBox像这样返回对话框

public AlertDialog alertbox(String title, String mymessage)

然后,无论你在哪里调用它,你都可以继续引用返回的对话框并根据需要将其关闭。