Пример кода отображения 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.
Собственно вопрос: можно ли этого избежать без ввода дополнительных флагов/переменных?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть проект, в котором используется мавенВ проекте надо в метод передать путь к файлу
Есть переменные экземпляра, переменные класса, локальные переменные, литералы, ссылочные типы, примитивные типы
Углубляю познания о джавеНаткнулся на статью о типах ссылок