Как избежать показа DialogFragment дважды

188
11 февраля 2018, 00:16

Пример кода отображения DialogFragment(просто показывает прогресс бар)

public void showProgressDialog(boolean isShow) {
    if(isShow){
        if(!mProgressDialog.isAdded()) {
            mProgressDialog.show(getSupportFragmentManager(), ProgressDialog.TAG);
        }
    } else {
        mProgressDialog.dismiss();
    }
}

В приложении может возникнуть ситуация, когда эта функция вызовется два раза одновременно. Для теста можно просто сделать так

public void showProgressDialog(boolean isShow) {
    if(isShow){
        if(!mProgressDialog.isAdded()) {
            mProgressDialog.show(getSupportFragmentManager(), ProgressDialog.TAG);
        }
    } else {
        mProgressDialog.dismiss();
    }
    if(isShow){
        if(!mProgressDialog.isAdded()) {
            mProgressDialog.show(getSupportFragmentManager(), ProgressDialog.TAG);
        }
    } else {
        mProgressDialog.dismiss();
    }
}

Такой код крашнется с

Fatal Exception: java.lang.IllegalStateException: Fragment already added: ProgressDialog{fffc31f #2 ProgressDialog}
       at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1892)...

Как я понял, добавление фрагмента происходит асинхронно, и поэтому isAdded() возвращает false.

Собственно вопрос: можно ли этого избежать без ввода дополнительных флагов/переменных?

READ ALSO
Работа с ресурсами java

Работа с ресурсами java

Есть проект, в котором используется мавенВ проекте надо в метод передать путь к файлу

194
Создание массива разных объектов

Создание массива разных объектов

Есть два интерфейса

213
К каким типам данных (потокам) необходимо координировать многопоточный доступ?

К каким типам данных (потокам) необходимо координировать многопоточный доступ?

Есть переменные экземпляра, переменные класса, локальные переменные, литералы, ссылочные типы, примитивные типы

204
Зачем нужны разные типы ссылок в Java?

Зачем нужны разные типы ссылок в Java?

Углубляю познания о джавеНаткнулся на статью о типах ссылок

251