Как убрать диалог из другого метода

1

Я создал диалоговое окно, которое можно вызывать из любого места, указав заголовок и сообщение следующим образом:

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
    Можете ли вы дать ошибку, которая появляется в logcat?
Теги:

3 ответа

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

Хотя вы, вероятно, не хотите показывать и отклонять диалог в том же методе. Вы видите, как приведенный выше код, по крайней мере, сохраняет ссылку на диалог, чтобы позже вы могли его отклонить?

  • 0
    .show работает, предположительно, потому что он использует тот же метод, который был создан в (alertbox). Тем не менее я хочу закрыть предупреждение после mChecker.checkAccess (mLicenseCheckerCallback); Строка завершается в методе под названием doCheck.
  • 0
    На основании предоставленного Тедом кода alertbox - это метод, а не объект.
Показать ещё 8 комментариев
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()
}
  • 0
    Спасибо чувак! Очень просто
1

Я бы получил alertBox, чтобы вернуть диалог так:

public AlertDialog alertbox(String title, String mymessage)

Затем, где бы вы его ни называли, вы можете продолжать ссылаться на возвращенный диалог и отклонять его по мере необходимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню