Fragment动画导致切换Fragment异常

今天项目中发生了如下异常:

 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

可是检查项目代码:

//        if (container != null && container.getChildCount() > 0) {
//           container.removeAllViews();
//        }
        if (contentView != null) {
            ViewGroup parent = (ViewGroup) contentView.getParent();

            if (parent != null) {
                parent.removeView(contentView);

            } else {
                LogUtil.v("BaseFragment", "error");
            }
            // unbinder = ButterKnife.bind(this, contentView);
        } else {
            this.layoutInflater = inflater;
            contentView = inflater.inflate(getContentLayoutID(), container, false);
            unbinder = ButterKnife.bind(this, contentView);
            initRecyclerView();
            setPresenter();
            // presenter = getPresenter();
            initView();
        }
        return contentView;

没有问题。却在快速切换时就会导致此异常的发生。之前从来没有过。
经过百度这篇文章发现了问题所在。
https://www.jianshu.com/p/2146ace8a244

原来以下移除ViewParent的操作:

public void endViewTransition(View view) {
 ··· 
if (view.mAttachInfo != null) {
 view.dispatchDetachedFromWindow(); 
}
 if (view.mParent != null) {
 view.mParent = null;
 } ·
·· invalidate();
 ··· }

只有在动画结束之后才会执行,如果在动画没有结束之前再次将view add到其他的viewgroup中就会引发此异常~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,548评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,975评论 2 59
  • 孙丽 焦点网络初级十期 信阳 坚持分享第107天 突然发现自己已经有好长时间没有冲孩子发火了,是什么让自己有了这么...
    孙丽_cdb3阅读 189评论 0 1
  • 1.每周一前准备工作:落实本次主讲老师以及个人资料和主讲内容,确定主持人选。 2.周一上午在群里发布周四沙龙活动信...
    天天向上韩建平阅读 348评论 0 1
  • 很多话,说不出来。是我不够勇敢,又或许是自卑。我不想为了孩子,草率的结婚,这辈子了了结束。过不到自己想要的生活。...
    变成自己喜欢的模样阅读 169评论 0 0