Я создал диалоговое окно, которое можно вызывать из любого места, указав заголовок и сообщение следующим образом:
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(); который вызывает сбои. Любые идеи, как правильно это сделать?
Это может быть так же просто, как вызвать 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();
}
Хотя вы, вероятно, не хотите показывать и отклонять диалог в том же методе. Вы видите, как приведенный выше код, по крайней мере, сохраняет ссылку на диалог, чтобы позже вы могли его отклонить?
Я тоже столкнулся с этой проблемой и хотел поделиться своей проблемой с тем, кто не хочет использовать вышеупомянутый метод.
Сначала я определил свой 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()
}
Я бы получил alertBox, чтобы вернуть диалог так:
public AlertDialog alertbox(String title, String mymessage)
Затем, где бы вы его ни называли, вы можете продолжать ссылаться на возвращенный диалог и отклонять его по мере необходимости.