private void addViewInner(android.view.View child, int index, android.view.ViewGroup .LayoutParams @params, bool preventRequestLayout) { if (mTransition != null) { // Don't prevent other add transitions from completing, but cancel remove // transitions to let them complete the process before we add to the container mTransition.cancel(android.animation.LayoutTransition.DISAPPEARING); } if (child.getParent() != null) { throw new System.InvalidOperationException("The specified child already has a parent. " + "You must call removeView() on the child's parent first."); } if (mTransition != null) { mTransition.addChild(this, child); } if (!checkLayoutParams(@params)) { @params = generateLayoutParams(@params); } if (preventRequestLayout) { child.mLayoutParams = @params; } else { child.setLayoutParams(@params); } if (index < 0) { index = mChildrenCount; } addInArray(child, index); // tell our children if (preventRequestLayout) { child.assignParent(this); } else { child.mParent = this; } if (child.hasFocus()) { requestChildFocus(child, child.findFocus()); } android.view.View.AttachInfo ai = mAttachInfo; if (ai != null && (mGroupFlags & FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW) == 0) { bool lastKeepOn = ai.mKeepScreenOn; ai.mKeepScreenOn = false; child.dispatchAttachedToWindow(mAttachInfo, (mViewFlags & VISIBILITY_MASK)); if (ai.mKeepScreenOn) { needGlobalAttributesUpdate(true); } ai.mKeepScreenOn = lastKeepOn; } onViewAdded(child); if ((child.mViewFlags & DUPLICATE_PARENT_STATE) == DUPLICATE_PARENT_STATE) { mGroupFlags |= FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE; } }
internal virtual void finishRemoveViewLocked(android.view.View view, int index) { int count = mViews.Length; // remove it from the list android.view.View[] tmpViews = new android.view.View[count - 1]; removeItem(tmpViews, mViews, index); mViews = tmpViews; android.view.ViewRootImpl[] tmpRoots = new android.view.ViewRootImpl[count - 1]; removeItem(tmpRoots, mRoots, index); mRoots = tmpRoots; android.view.WindowManagerClass.LayoutParams[] tmpParams = new android.view.WindowManagerClass .LayoutParams[count - 1]; removeItem(tmpParams, mParams, index); mParams = tmpParams; if (view != null) { view.assignParent(null); } }