private void correctTooHigh(int childCount){
  int lastPosition=mFirstPosition + childCount - 1;
  if (lastPosition == mItemCount - 1 && childCount > 0) {
    final int lastBottom=getLowestChildBottom();
    final int end=(getBottom() - getTop()) - getListPaddingBottom();
    int bottomOffset=end - lastBottom;
    final int firstTop=getHighestChildTop();
    if (bottomOffset > 0 && (mFirstPosition > 0 || firstTop < getListPaddingTop())) {
      if (mFirstPosition == 0) {
        bottomOffset=Math.min(bottomOffset,getListPaddingTop() - firstTop);
      }
      offsetChildrenTopAndBottom(bottomOffset);
      if (mFirstPosition > 0) {
        int previousPosition=mFirstPosition - 1;
        fillUp(previousPosition,getNextChildUpsBottom(previousPosition));
        adjustViewsUpOrDown();
      }
    }
  }
}

private void correctTooHigh ( int childCount ) { int lastPosition = mFirstPosition + childCount - 1 ; if ( lastPosition == mItemCount - 1 && childCount > 0 ) { final int lastBottom = getLowestChildBottom ( ) ; final int end = ( getBottom ( ) - getTop ( ) ) - getListPaddingBottom ( ) ; int bottomOffset = end - lastBottom ; final int firstTop = getHighestChildTop ( ) ; if ( bottomOffset > 0 && ( mFirstPosition > 0 || firstTop < getListPaddingTop ( ) ) ) { if ( mFirstPosition == 0 ) { bottomOffset = Math . min ( bottomOffset , getListPaddingTop ( ) - firstTop ) ; } offsetChildrenTopAndBottom ( bottomOffset ) ; if ( mFirstPosition > 0 ) { int previousPosition = mFirstPosition - 1 ; fillUp ( previousPosition , getNextChildUpsBottom ( previousPosition ) ) ; adjustViewsUpOrDown ( ) ; } } } }
check if we have dragged the bottom of the list too high ( we have pushed the top element off the top of the screen when we did not need to ) . correct by sliding everything back down .
