下面是场景: Activity 包含片段 A
,它依次使用 getChildFragmentManager()
在其 onCreate
中添加片段 A1
和 A2
,如下所示:
getChildFragmentManager()
.beginTransaction()
.replace(R.id.fragmentOneHolder, new FragmentA1())
.replace(R.id.fragmentTwoHolder, new FragmentA2())
.commit()
到目前为止,一切正常。
然后,我们在活动中运行以下事务:
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(anim1, anim2, anim1, anim2)
.replace(R.id.fragmentHolder, new FragmentB())
.addToBackStack(null)
.commit()
在转换过程中,片段 B
的 enter
动画正常运行,但是 片段 A1和 A2完全消失。当我们使用 Back 按钮恢复事务时,它们会正确初始化,并在 popEnter
动画期间正常显示。
在我的简短测试中,它变得更奇怪了——如果我为子片段设置动画(见下文) ,当我们添加片段 B
时,exit
动画会间歇地运行
getChildFragmentManager()
.beginTransaction()
.setCustomAnimations(enter, exit)
.replace(R.id.fragmentOneHolder, new FragmentA1())
.replace(R.id.fragmentTwoHolder, new FragmentA2())
.commit()
我想要达到的效果很简单-我想要的 exit
(或应该是 popExit
?)动画在片段 A
(anim2)上运行,动画整个容器,包括其嵌套的子容器。
有办法做到吗?
编辑 : 请在这里找到一个测试用例 < a href = “ https://github.com/BurntBrunch/NestedFragmentsAnimationsTest”>
编辑2 : 感谢@StevenByle 鼓励我继续尝试静态动画。显然,你可以在每个操作的基础上设置动画(不是全局的整个事务) ,这意味着孩子可以有一个不确定的静态动画集,而他们的父母可以有一个不同的动画和整个事务可以提交在一个事务。参见下面的讨论和 更新的测试用例项目。