【发布时间】:2015-08-17 13:12:55
【问题描述】:
因此,如果我在过渡动画运行时调用 popBackStack,我会遇到应用程序崩溃的情况。是否有任何干净的方法可以停止任何正在进行的过渡,或者至少检查是否有人在运行?
我得到的异常:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3577)
有几个事实可能与此异常发生的原因有关,也可能无关:
- 我使用的是标准 Fragment 实现,而不是 supportFragment(因为我想使用 SettingsFragment)。
- 我在片段上使用
setRetainInstance(true) - 我确实尝试从 Fragment 的
onCreateView中的父视图中删除子视图,但由于某种原因失败(调用parentView.remove(childView)后childView.getParent()仍然不为空)
我考虑过的解决方案:
- 设置
retainInstance=false - 等到animation ends 再执行
popBackStack - 找到一种彻底中止/反转转换的方法
no.1 并不是一个真正的选择,因为它会破坏用户的 UX 并导致大量重构。
no.2 是我现在考虑最多的一个,但我不喜欢如何移动与动画初始化相关的代码并为此解决方法实现一堆代码
no.3 如果我知道怎么做,我会选择哪种解决方案。有人吗?
【问题讨论】: