private void correctTooHigh(int childCount){
  int lastPosition=mFirstPosition + childCount - 1;
  if (lastPosition == mItemCount - 1 && childCount > 0) {
    final int lastBottom=getScrollChildBottom();
    final int end=(getBottom() - getTop()) - mListPadding.bottom;
    int bottomOffset=end - lastBottom;
    final int firstTop=getScrollChildTop();
    if (bottomOffset > 0 && (mFirstPosition > 0 || firstTop < mListPadding.top)) {
      if (mFirstPosition == 0) {
        bottomOffset=Math.min(bottomOffset,mListPadding.top - firstTop);
      }
      tryOffsetChildrenTopAndBottom(bottomOffset);
      if (mFirstPosition > 0) {
        int newFirstTop=getScrollChildTop();
        fillUp(mFirstPosition - 1,newFirstTop - mDividerHeight);
        adjustViewsUpOrDown();
      }
    }
  }
}

private void correctTooHigh ( int childCount ) { int lastPosition = mFirstPosition + childCount - 1 ; if ( lastPosition == mItemCount - 1 && childCount > 0 ) { final int lastBottom = getScrollChildBottom ( ) ; final int end = ( getBottom ( ) - getTop ( ) ) - mListPadding . bottom ; int bottomOffset = end - lastBottom ; final int firstTop = getScrollChildTop ( ) ; if ( bottomOffset > 0 && ( mFirstPosition > 0 || firstTop < mListPadding . top ) ) { if ( mFirstPosition == 0 ) { bottomOffset = Math . min ( bottomOffset , mListPadding . top - firstTop ) ; } tryOffsetChildrenTopAndBottom ( bottomOffset ) ; if ( mFirstPosition > 0 ) { int newFirstTop = getScrollChildTop ( ) ; fillUp ( mFirstPosition - 1 , newFirstTop - mDividerHeight ) ; 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 .
