diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index d0ed23f..ab5ff3d 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -3856,12 +3856,23 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te // Update this first, since setNextSelectedPositionInt inspects it mNeedSync = false; - if (mTranscriptMode == TRANSCRIPT_MODE_ALWAYS_SCROLL || - (mTranscriptMode == TRANSCRIPT_MODE_NORMAL && - mFirstPosition + getChildCount() >= mOldItemCount)) { + if (mTranscriptMode == TRANSCRIPT_MODE_ALWAYS_SCROLL) { mLayoutMode = LAYOUT_FORCE_BOTTOM; return; } + if (mTranscriptMode == TRANSCRIPT_MODE_NORMAL) { + final int childCount = getChildCount(); + final int listBottom = getBottom() - getPaddingBottom(); + final View lastChild = getChildAt(childCount - 1); + final int lastBottom = lastChild != null ? lastChild.getBottom() : listBottom; + if (mFirstPosition + childCount >= mOldItemCount && lastBottom <= listBottom) { + mLayoutMode = LAYOUT_FORCE_BOTTOM; + return; + } + // Something new came in and we didn't scroll; give the user a clue that + // there's something new. + awakenScrollBars(); + } switch (mSyncMode) { case SYNC_SELECTED_POSITION: |
