@UiThread
    public void notifyChildMoved(int parentPosition, int fromChildPosition, int toChildPosition) {
        P parent = mParentList.get(parentPosition);
        int flatParentPosition = getFlatParentPosition(parentPosition);

        ExpandableWrapper<P, C> parentWrapper = mFlatItemList.get(flatParentPosition);
        parentWrapper.setParent(parent);
        if (parentWrapper.isExpanded()) {
            ExpandableWrapper<P, C> fromChild = mFlatItemList.remove(flatParentPosition + 1 + fromChildPosition);
            mFlatItemList.add(flatParentPosition + 1 + toChildPosition, fromChild);
            notifyItemMoved(flatParentPosition + 1 + fromChildPosition, flatParentPosition + 1 + toChildPosition);
        }
    }
@ UiThread public void notifyChildMoved ( int parentPosition , int fromChildPosition , int toChildPosition ) { P parent = mParentList . get ( parentPosition ) ; int flatParentPosition = getFlatParentPosition ( parentPosition ) ; ExpandableWrapper < P , C > parentWrapper = mFlatItemList . get ( flatParentPosition ) ; parentWrapper . setParent ( parent ) ; if ( parentWrapper . isExpanded ( ) ) { ExpandableWrapper < P , C > fromChild = mFlatItemList . remove ( flatParentPosition + 1 + fromChildPosition ) ; mFlatItemList . add ( flatParentPosition + 1 + toChildPosition , fromChild ) ; notifyItemMoved ( flatParentPosition + 1 + fromChildPosition , flatParentPosition + 1 + toChildPosition ) ; } }
Notify any registered observers that the child list item contained within the parent
at {@code parentPosition} has moved from {@code fromChildPosition} to {@code toChildPosition}.
<p>
<p>This is a structural change event. Representations of other existing items in the
data set are still considered up to date and will not be rebound, though their
positions may be altered.</p>

@param parentPosition Position of the parent which has a child that has moved
@param fromChildPosition Previous position of the child
@param toChildPosition New position of the child