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

private void correctTooLow ( int childCount ) { if ( mFirstPosition == 0 && childCount > 0 ) { final int firstTop = getScrollChildTop ( ) ; final int start = mListPadding . top ; final int end = ( getBottom ( ) - getTop ( ) ) - mListPadding . bottom ; int topOffset = firstTop - start ; final int lastBottom = getScrollChildBottom ( ) ; int lastPosition = mFirstPosition + childCount - 1 ; if ( topOffset > 0 ) { if ( lastPosition < mItemCount - 1 || lastBottom > end ) { if ( lastPosition == mItemCount - 1 ) { topOffset = Math . min ( topOffset , lastBottom - end ) ; } tryOffsetChildrenTopAndBottom ( - topOffset ) ; if ( lastPosition < mItemCount - 1 ) { fillDown ( lastPosition + 1 , getFillChildBottom ( ) + mDividerHeight ) ; adjustViewsUpOrDown ( ) ; } } else if ( lastPosition == mItemCount - 1 ) { adjustViewsUpOrDown ( ) ; } } } }
check if we have dragged the bottom of the list too low ( we have pushed the bottom element off the bottom of the screen when we did not need to ) . correct by sliding everything back up .
