метод FragmentTransaction.

ая с версии поддержки 25.1.0 и самой последней версии 25.1.1, я получил странное поведение с заменой / добавлением фрагмента. Сообщалось о проблемах для 25.1.0Android - fragTransaction.replace () не работает в библиотеке поддержки 25.1.0

Но теперь в 25.1.1 у меня появились похожие проблемы. Чтобы воспроизвести поведение, я создал пример приложения, которое вы можете найти наhttps://github.com/holoduke/fragmenttest

Это в основном одно действие с контейнером фрагмента. Доступна пара фрагментов, которые будут динамически заменять друг друга нажатием кнопки. Мы начнем с добавления FragmentA из самого mainActivity.

    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    Fragment f = new FragmentA();
    fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    f.setRetainInstance(false);
    ft.replace(R.id.fragmenttarget, f);
    ft.addToBackStack(null);
    ft.commit();

Все хорошо работает отлично. в 25.0.1, 25.1.0 и 25.1.1

Теперь во фрагменте A есть 3 кнопки, которые заменят текущий фрагмент фрагментом A, фрагментом B или фрагментом C

код для добавления фрагментов B и C почти такой же, как фрагмент A, за исключением того, что мы не определили:

fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

при добавлении фрагмента B или C выполняется следующий код:

    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    Fragment f = new FragmentB();
    f.setRetainInstance(false);
    ft.replace(R.id.fragmenttarget, f);
    ft.addToBackStack(null);
    ft.commit();

Все еще хорошо в обоих 25.0.1, 25.1.0 и 25.1.1. Если вы добавляете фрагменты B и C пару раз, fm.getBackStackEntryCount () увеличивается. Это хорошо.

Теперь странная часть. Мы хотим добавить FragmentA с помощью popStackImmediate (чтобы очистить историю). Здесь поведение обеих версий поддержки сходит с ума.

Допустим, что вы выполнили следующий bavhiour во всех 3 версиях:

запустить приложениезаменить фрагментом Bзаменить фрагментом Сзаменить фрагментом Bзаменить фрагментом Сзаменить фрагментом А

в 25.0.1 все отлично работает. обратный стек очищается и onCreateView и ActivityCreated вызывается во FragmentA.

в 25.1.0 как-то после замены на FragmentA onCreateView и ActivityCreated вызываются 2 раза. Нехорошо.

в 25.1.1 это еще хуже. после замены фрагментом A для всех представлений в backstack вызываются onCreateView и ActivityCreated. Теперь это смешно, верно :)

Просто попробуйте мой пример приложения и посмотрите в logcat. измените версию поддержки в файле app.gradle, чтобы увидеть различия.

Я был бы рад, если бы кто-то смог распознать эту проблему, чтобы мы могли найти способ преодолеть или даже решить эту проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос