Здесь сценарий: 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 (не глобально для всей транзакции), что означает, что у детей может быть неопределенный статический набор анимации, в то время как у их родителя может быть другая анимация, и все это может быть зафиксировано в одной транзакции, См. Обсуждение ниже и обновленный проект тестового примера.