OSDN Git Service

Fix updating fast scroll state for data set changes
authorAdam Powell <adamp@google.com>
Mon, 14 Oct 2013 00:19:10 +0000 (17:19 -0700)
committerAdam Powell <adamp@google.com>
Mon, 14 Oct 2013 01:49:15 +0000 (18:49 -0700)
Only looking for old/new count changes is incomplete with the current
state of things. The observer's onChanged method will update this in
some cases, stomping the different values needed to trigger a fast
scroller update. Also update the fast scroller if the data change flag
is set.

Also fix the positioning of the legacy text overlay.

Bug 11188512

Change-Id: I35b3915ce49f8494c6d82f6be6d6df7169deddd7

core/java/android/widget/AbsListView.java
core/java/android/widget/FastScroller.java
core/java/android/widget/ListView.java

index 2e77578..3eb0052 100644 (file)
@@ -2084,8 +2084,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
             mRecycler.markChildrenDirty();
         }
 
-        if (mFastScroller != null && mItemCount != mOldItemCount) {
-            mFastScroller.onItemCountChanged(mOldItemCount, mItemCount);
+        if (mFastScroller != null && (mItemCount != mOldItemCount || mDataChanged)) {
+            mFastScroller.onItemCountChanged(mItemCount);
         }
 
         layoutChildren();
index 01a848f..4614c53 100644 (file)
@@ -441,7 +441,7 @@ class FastScroller {
         updateLayout();
     }
 
-    public void onItemCountChanged(int oldTotalItemCount, int totalItemCount) {
+    public void onItemCountChanged(int totalItemCount) {
         final int visibleItemCount = mList.getChildCount();
         final boolean hasMoreItems = totalItemCount - visibleItemCount > 0;
         if (hasMoreItems && mState != STATE_DRAGGING) {
@@ -1095,12 +1095,14 @@ class FastScroller {
         final float thumbMiddle = position * range + offset;
         thumbImage.setTranslationY(thumbMiddle - thumbImage.getHeight() / 2);
 
+        final float previewPos = mOverlayPosition == OVERLAY_AT_THUMB ? thumbMiddle : 0;
+
         // Center the preview on the thumb, constrained to the list bounds.
         final ImageView previewImage = mPreviewImage;
         final float previewHalfHeight = previewImage.getHeight() / 2f;
         final float minP = top + previewHalfHeight;
         final float maxP = bottom - previewHalfHeight;
-        final float previewMiddle = MathUtils.constrain(thumbMiddle, minP, maxP);
+        final float previewMiddle = MathUtils.constrain(previewPos, minP, maxP);
         final float previewTop = previewMiddle - previewHalfHeight;
         previewImage.setTranslationY(previewTop);
 
index 4b00f90..78237c3 100644 (file)
@@ -508,7 +508,6 @@ public class ListView extends AbsListView {
         requestLayout();
     }
 
-
     /**
      * The list is empty. Clear everything out.
      */