【问题标题】:How do I handle back button press in a Fragment in mid-transition?如何在过渡期间处理片段中的后退按钮按下?
【发布时间】: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() 仍然不为空)

我考虑过的解决方案:

  1. 设置retainInstance=false
  2. 等到animation ends 再执行popBackStack
  3. 找到一种彻底中止/反转转换的方法

no.1 并不是一个真正的选择,因为它会破坏用户的 UX 并导致大量重构。

no.2 是我现在考虑最多的一个,但我不喜欢如何移动与动画初始化相关的代码并为此解决方法实现一堆代码

no.3 如果我知道怎么做,我会选择哪种解决方案。有人吗?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    您需要将缓存视图与其父级分离:

    @Override
        public void onDestroyView() {
            if (view != null) {
                ViewGroup parent = (ViewGroup) view.getParent();
                if (parent != null)
                    parent.removeView(view);
            }
            super.onDestroyView();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      相关资源
      最近更新 更多