我创建了一个对话框,可以通过提供标题和消息从任何地方调用,如下所示:
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();导致崩溃的声明。任何想法如何正确地做到这一点?
答案 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)
然后,无论你在哪里调用它,你都可以继续引用返回的对话框并根据需要将其关闭。