code: @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);
          }
      }
docs: 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