大家好,我又来问关于Fragment的问题了(我正在使用android.app.Fragment而不是Support Fragments)。
我想要替换一个Fragment。但这并不像使用以下代码那么简单:
fragmentTransaction
.replace(containerId, newFragment)
.addToBackStack("unique tag")
.commit()
为什么不这样做? 好问题,朋友们。这是因为我的newFragment
有一个过渡动画。
动画在哪里定义? 另一个很好的问题,它在片段的onCreateAnimator()
中定义。
为什么要在那里定义? 为什么的长答案可以在 嵌套片段转换不正确 中找到。现在你需要相信这是我项目中需要这样做的方式。
动画在做什么? 简单地从屏幕边缘滚动到中心,完全覆盖原始片段。请记住,在这种情况下,旧片段只是静止不动。它有一个动画效果来不移动。
问题是什么?
问题在于newFragment似乎具有比旧的更低的高度(或z值)。因此,转换无法被观察到,因为旧片段位于新片段上方。在动画持续时间结束时,您会看到新片段在旧片段上方闪烁。我希望newFragment从动画开始就覆盖旧的。
为什么不使用add?这似乎会带来更多问题,因为我有许多片段想要在视图中交换。使用add似乎会在下一次使用replace时触发它们的退出动画,即使它们前面有1...n个片段。它们也不会暂停。
为什么不设置高度?因为我支持api 19,它没有高度属性。
为什么不使用ViewCompat.setElevation()对于api 19?我尝试了它,但结果仍然失败。
是否有人找到解决这个问题的方法?
setReorderingAllowed(false)
?(参考链接:https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setReorderingAllowed(boolean)) - azizbekiansetAllowOptimization(false)
。 - azizbekian