Android: Фрагменты действуют неожиданно (внезапно становятся прозрачными?)

У меня проблема с моими фрагментами. Я использую этот код для навигации между фрагментами:

Между "основными" фрагментами (без обратного стека, потому что я хочу, чтобы пользователь выходил, когда он нажимает назад (это работает)):

    FragmentManager fragmentManager = getFragmentManager();
    final FragmentTransaction ft = fragmentManager.beginTransaction();

    ft.setCustomAnimations(R.anim.slide_in_up_honeycomb, R.anim.slide_out_up_honeycomb);
    ft.replace(R.id.container, NewsFragment.newInstance(position + 1), NewsFragment.class.getSimpleName());
    ft.commit();

и между "внутренними" фрагментами (с бэкстеком):

            FragmentTransaction ft = ((Activity) getActivity()).getFragmentManager().beginTransaction();
            Fragment nextFragment = LexikonDetailFragment
                    .newInstance(item);

            ft.setCustomAnimations(R.anim.slide_in_up_honeycomb, R.anim.slide_out_up_honeycomb);
            ft.replace(R.id.container, nextFragment);
            ft.addToBackStack(LexikonDetailFragment.class.getSimpleName());
            ft.commit();

Но в следующем случае:

фрагмент А -> фрагмент А1

фрагмент A1 -> фрагмент B

Нажмите кнопку «Назад» (должно закрыть приложение) -> возврат к фрагменту A1

Это происходит:

Изображение

Похоже, что фрагмент A1 не удаляется из стека и остается в фоновом режиме. Я думал, что одним из возможных решений может быть установка для всех фрагментов белого фона ... но это не решит проблему, а просто скроет ее. Итак, какое может быть возможное решение?


person Daniel    schedule 17.01.2016    source источник
comment
Вы знаете значение addToBackStack?   -  person tiny sunlight    schedule 17.01.2016
comment
Конечно, но я думал, что фрагмент автоматически удаляется при нажатии назад.   -  person Daniel    schedule 17.01.2016
comment
Я хочу, чтобы внутренние фрагменты можно было использовать повторно, поэтому я использую addtobackstack. Но как только верхний фрагмент изменен, я не хочу снова возрождать старые внутренние фрагменты.   -  person Daniel    schedule 17.01.2016
comment
Итак, вы можете добавить фон в LexikonDetailFragment. Или использовать ft.hide(R.id.container, oldFragment); перед добавлением newFragment.addToBackStack точно так же, как намерение из одного действия в другое действие. Вы можете увидеть предварительное действие, если второе действие имеет прозрачную тему.   -  person tiny sunlight    schedule 17.01.2016
comment
Хм. Я понимаю ваш пример намерения, но это не должно быть проблемой, если я использую функцию ft.replace. Во всяком случае, я нашел решение. Я обновлю его позже :) Спасибо за вашу помощь!   -  person Daniel    schedule 17.01.2016


Ответы (1)


Хорошо, я нашел решение:

Мне пришлось удалить внутренние фрагменты вручную с помощью команды:

fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

Я вызываю эту команду каждый раз, когда изменяется мой «внешний» фрагмент. Внутренние удаляются и тада... это работает как шарм :)

person Daniel    schedule 17.01.2016