Как уволить AlertDialog.Builder без методов onClick кнопок? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть два метода для создания и уничтожения AlertDialog, который имеет только индикатор выполнения.

public static AlertDialog.Builder showProgressAlertDialog(Context context, String title){
    AlertDialog.Builder builder;
    builder = new AlertDialog.Builder(context, R.style.AlertDialogTheme);
    builder.setTitle(title);
    ProgressBar progressBar = new ProgressBar(context);
    builder.setView(progressBar);
    builder.show();
    return builder;
}

public static void dismissProgressAlertDialog(AlertDialog.Builder builder){
    builder.show().cancel();
}

При его создании ошибок нет. Однако когда я вызываю метод dismiss, приложение выдает следующее исключение: java .lang.IllegalStateException: у указанного дочернего элемента уже есть родительский элемент. Сначала вы должны вызвать removeView () для родительского объекта ребенка.

Обратите внимание, что мне нужно вызвать этот метод и уничтожить диалоговое окно из другого класса, поэтому метод onClick не будет работать для меня.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Используйте Dismiss () для переменной экземпляра AlertDialog

private AlertDialog dialog;

onCreate() {
    dialog = createAlertDialog(context, title);
}

public static AlertDialog createAlertDialog(Context context, String title){
    final AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialogTheme);
    builder.setTitle(title);
    ProgressBar progressBar = new ProgressBar(context);
    builder.setView(progressBar);
    return builder.create();
}

public static void dismissAlertDialog() {
    dialog.dismiss();
}
0 голосов
/ 12 апреля 2020

Вы должны хранить экземпляр AlertDialog глобальным Field в классе, теперь вы можете получить доступ к AlertDialog объекту во всем классе

private AlertDialog alertDialog;

public void onCreate(){
  this.alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogTheme)
.create();
}

public void show(){
 this.alertDialog.show()
}

public void close(){
 this.alertDialog.dismiss()
}
...