summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/java/android/widget/AbsListView.java17
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: