@orbit070

Куда исчезает фрагмент?

Есть у меня обычный DialogFragment для показа ProgressBar-а
public class LoadingDialogFragment extends DialogFragment {
    public static final String TAG = "LoadingDialogFragment";

    public static LoadingDialogFragment newInstance() {
        return new LoadingDialogFragment();
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.loading_indicator);

        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);

        dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        return dialog;
    }
}


Показываю и скрываю этот индикатор я так

protected void showLoadingDialogFragment() {
        LoadingDialogFragment dialog = LoadingDialogFragment.newInstance();
        dialog.setCancelable(false);
        dialog.show(getSupportFragmentManager(), LoadingDialogFragment.TAG);
    }

    protected void hideLoadingDialogFragment() {
        Fragment fragment = getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.TAG); // здесь null
        if (fragment instanceof LoadingDialogFragment) {
            ((DialogFragment) fragment).dismiss();
        }
    }


Все всегда работало нормально, но недавно возникла ситуация в одном месте: диалог отображается, но после окончания загрузки данных не скрывается. Я дебаггером смотрю что и как - метод hideLoadingDialogFragment вызывается, но
getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.TAG);
возвращает null(я в коде указал это место), несмотря на то что на экране отображается этот самый диалог. Каким образом можно отловить ошибку? что я не так делаю, куда пропадает фрагмент из ФрагментМенеджера?
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
Конечно, "но после окончания загрузки данных" - очень слабая зацепка и вариантов разворота событий масса.

Рискну предположить, что FragmentManager, который возвращает null, уже не является экземпляром, который существовал при запуске диалога. Происходит это, например, в результате смены ориентации устройства.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы