diff --git a/src/api-impl/android/view/ViewGroup.java b/src/api-impl/android/view/ViewGroup.java index 47bd3661..b8defa1d 100644 --- a/src/api-impl/android/view/ViewGroup.java +++ b/src/api-impl/android/view/ViewGroup.java @@ -15,6 +15,7 @@ import java.util.Objects; public class ViewGroup extends View implements ViewParent, ViewManager { public ArrayList children; + private ArrayList detachedChildren; private OnHierarchyChangeListener onHierarchyChangeListener; private LayoutTransition transition; @@ -34,6 +35,7 @@ public class ViewGroup extends View implements ViewParent, ViewManager { super(context, attrs, defStyleAttr); children = new ArrayList(); + detachedChildren = new ArrayList(); } public void addView(View child) { @@ -136,10 +138,15 @@ public class ViewGroup extends View implements ViewParent, ViewManager { } public void detachViewFromParent(int index) { - children.remove(index).parent = null; + View child = children.remove(index); + child.parent = null; + detachedChildren.add(child); } public void attachViewToParent(View view, int index, LayoutParams params) { + if (!detachedChildren.remove(view)) { + addViewInternal(view, index, params); + } if (!checkLayoutParams(params)) params = generateLayoutParams(params); @@ -151,6 +158,9 @@ public class ViewGroup extends View implements ViewParent, ViewManager { } protected void removeDetachedView(View child, boolean animate) { + if (!detachedChildren.remove(child)) + return; + child.parent = null; native_removeView(widget, child.widget); if (isAttachedToWindow()) child.detachFromWindowInternal(); @@ -388,6 +398,7 @@ public class ViewGroup extends View implements ViewParent, ViewManager { public void detachViewFromParent(View view) { children.remove(view); view.parent = null; + detachedChildren.add(view); } public void setTouchscreenBlocksFocus(boolean touchscreenBlocksFocus) {}