Здесь сценарий: Activity содержит фрагмент A
, который, в свою очередь, использует getChildFragmentManager()
для добавления фрагментов A1
и A2
в свой onCreate
так:
getChildFragmentManager()
.beginTransaction()
.replace(R.id.fragmentOneHolder, new FragmentA1())
.replace(R.id.fragmentTwoHolder, new FragmentA2())
.commit()
До сих пор, так хорошо, все работает как ожидалось.
Затем в Activity выполняем следующую транзакцию:
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(anim1, anim2, anim1, anim2)
.replace(R.id.fragmentHolder, new FragmentB())
.addToBackStack(null)
.commit()
Во время перехода анимация enter
для фрагмента B
выполняется правильно, но фрагменты A1 и A2 полностью исчезают. Когда мы вернем транзакцию с помощью кнопки "Назад", они правильно инициализируются и отображаются нормально во время анимации popEnter
.
В моем кратком тестировании это стало более странным - если я настроил анимацию для дочерних фрагментов (см. ниже), анимация exit
выполняется с перерывами, когда мы добавляем фрагмент B
getChildFragmentManager()
.beginTransaction()
.setCustomAnimations(enter, exit)
.replace(R.id.fragmentOneHolder, new FragmentA1())
.replace(R.id.fragmentTwoHolder, new FragmentA2())
.commit()
Эффект, который я хочу достичь, прост - я хочу, чтобы анимация exit
(или должна быть popExit
?) на фрагменте A
(anim2) для запуска, анимация всего контейнера, включая его вложенных детей.
Есть ли способ достичь этого?
Изменить: найдите тестовый пример здесь
Edit2. Спасибо @StevenByle за то, что он заставил меня продолжать статические анимации. По-видимому, вы можете настроить анимацию на основе op-op (не глобально для всей транзакции), что означает, что у детей может быть неопределенный статический набор анимации, в то время как у их родителя может быть другая анимация, и все это может быть зафиксировано в одной транзакции, См. Обсуждение ниже и обновленный проект тестового примера.