You must call removeView () on the child's parent first 처리

1988 단어 BugFix
이 문제는 우리가 가입하고 싶은view가parent가 존재하기 때문에 보통 (ViewGroup)view를 호출하기만 하면 됩니다.getParent()).removeView(view)만 있으면 되지만, 어떤 때는 문제를 해결할 수 없습니다.이때 아래 코드를 참고할 수 있다.
        if (child.getParent() instanceof ViewGroup) {
            ViewGroup parent = (ViewGroup) child.getParent();
            LayoutTransition layoutTransition = null;
            if (parent.getLayoutTransition() != null) {
                layoutTransition = parent.getLayoutTransition();
                parent.setLayoutTransition(null);
            }
            parent.removeView(child);
            if (layoutTransition != null) {
                parent.setLayoutTransition(layoutTransition);
            }

            if (child.getParent() != null) {
                // LayoutTransition     removeView  ,   
                ViewGroupUtils.cancelLayoutTransition(parent);
                //   view          view
                if (child.getParent() != null && FIELD_VIEW_PARENT != null) {
                    //       parent   
                    ReflectionUtils.setFieldValue(child, ReflectionUtils.getPrivateField(View.class, "mParent"), null);
                }
            }

            //   parent,    = =
            if (child.getParent() != null) {
                return;
            }
        }

 
public boolean cancelLayoutTransition(ViewGroup group) {
            if (group != null) {
                final LayoutTransition layoutTransition = group.getLayoutTransition();
                if (layoutTransition != null && layoutTransition.isRunning() &&
                        METHOD_LAYOUT_TRANSITION_CANCEL != null) {
                    //  cancel   @hide,        
                    ReflectionUtils.invoke(group.getLayoutTransition(), null, ReflectionUtils.getPrivateMethod(LayoutTransition.class, "cancel"));
                    return true;
                }
            }
            return false;
        }

좋은 웹페이지 즐겨찾기