我有两个片段CatFragment
和DogFragment
。我有一只新狗,不再爱我的猫,所以我想在DogFragment()
之上添加CatFragment
,并在它们之间做一个交叉淡入淡出动画。
fragmentManager!!.beginTransaction()
.setCustomAnimations(
R.anim.fade_in,
R.anim.fade_out,
R.anim.fade_in,
R.anim.fade_out
)
.add(R.id.frame, DogFragment())
.addToBackStack(null)
.hide(fragmentManager!!.findFragmentByTag(CatFragment.TAG))
.commitAllowingStateLoss()
我的CatFragment()
有两种状态:
Cat
(我的猫的漂亮照片)LoadingABetterPet
(只是一个进度条)在这些状态之间切换时,片段内部视图会交叉淡入淡出。
我的DogFragment()
有一个状态:我全新的狗的漂亮照片。
用户看到以下流程:
CatFragment.Cat
- (内部交叉淡化) - > CatFragment.LoadingABetterPet
-
(片段管理器交叉淡化) - > DogFragment
。
当用户在DogFragment
可见时返回时,我希望他们看到CatFragment
状态为Cat
。
然而,当DogFragment
动画到屏幕上时,CatFragment
并行内部会在LoadingABetterPet
到Cat
内运行自己的交叉渐变动画。这会在.add()
片段管理器动画期间导致一些伪像,用户可以看到我的猫。
为了避免这种情况,我希望CatFragment
在LoadingABetterPet
正在运行动画时将动画从Cat
延迟回fragmentManager
。我怎么能这样做?
支持片段管理器是否公开动画当前是否正在运行?
答案 0 :(得分:-1)
我建议另一个解决方案。我个人更喜欢在相应的Fragment
中加载数据。我建议将加载移至DogFragment
并将工作流程更改为
CatFragment.Cat --> (FragmentManager crossfade)
--> DogFragment.Loading --> (crossfade) --> DogFragment.Dog