Loading core/java/android/widget/AbsListView.java +6 −5 Original line number Diff line number Diff line Loading @@ -2076,22 +2076,23 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); mInLayout = true; final int childCount = getChildCount(); if (changed) { int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { getChildAt(i).forceLayout(); } mRecycler.markChildrenDirty(); } if (mFastScroller != null && (mItemCount != mOldItemCount || mDataChanged)) { mFastScroller.onItemCountChanged(mItemCount); } layoutChildren(); mInLayout = false; mOverscrollMax = (b - t) / OVERSCROLL_LIMIT_DIVISOR; // TODO: Move somewhere sane. This doesn't belong in onLayout(). if (mFastScroller != null) { mFastScroller.onItemCountChanged(getChildCount(), mItemCount); } } /** Loading core/java/android/widget/FastScroller.java +19 −11 Original line number Diff line number Diff line Loading @@ -224,6 +224,8 @@ class FastScroller { mHasPendingDrag = false; } }; private int mOldItemCount; private int mOldChildCount; /** * Used to delay hiding fast scroll decorations. Loading @@ -248,6 +250,8 @@ class FastScroller { public FastScroller(AbsListView listView) { mList = listView; mOverlay = listView.getOverlay(); mOldItemCount = listView.getCount(); mOldChildCount = listView.getChildCount(); final Context context = listView.getContext(); mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); Loading @@ -258,6 +262,7 @@ class FastScroller { final ImageView trackImage = new ImageView(context); mTrackImage = trackImage; updateLongList(mOldChildCount, mOldItemCount); int width = 0; // Add track to overlay if it has an image. Loading Loading @@ -445,20 +450,23 @@ class FastScroller { updateLayout(); } public void onItemCountChanged(int totalItemCount) { final int visibleItemCount = mList.getChildCount(); final boolean hasMoreItems = totalItemCount - visibleItemCount > 0; public void onItemCountChanged(int childCount, int itemCount) { if (mOldItemCount != itemCount || mOldChildCount != childCount) { mOldItemCount = itemCount; mOldChildCount = childCount; final boolean hasMoreItems = itemCount - childCount > 0; if (hasMoreItems && mState != STATE_DRAGGING) { final int firstVisibleItem = mList.getFirstVisiblePosition(); setThumbPos(getPosFromItemCount(firstVisibleItem, visibleItemCount, totalItemCount)); setThumbPos(getPosFromItemCount(firstVisibleItem, childCount, itemCount)); } updateLongList(visibleItemCount, totalItemCount); updateLongList(childCount, itemCount); } } private void updateLongList(int visibleItemCount, int totalItemCount) { final boolean longList = visibleItemCount > 0 && totalItemCount / visibleItemCount >= MIN_PAGES; private void updateLongList(int childCount, int itemCount) { final boolean longList = childCount > 0 && itemCount / childCount >= MIN_PAGES; if (mLongList != longList) { mLongList = longList; Loading Loading
core/java/android/widget/AbsListView.java +6 −5 Original line number Diff line number Diff line Loading @@ -2076,22 +2076,23 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); mInLayout = true; final int childCount = getChildCount(); if (changed) { int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { getChildAt(i).forceLayout(); } mRecycler.markChildrenDirty(); } if (mFastScroller != null && (mItemCount != mOldItemCount || mDataChanged)) { mFastScroller.onItemCountChanged(mItemCount); } layoutChildren(); mInLayout = false; mOverscrollMax = (b - t) / OVERSCROLL_LIMIT_DIVISOR; // TODO: Move somewhere sane. This doesn't belong in onLayout(). if (mFastScroller != null) { mFastScroller.onItemCountChanged(getChildCount(), mItemCount); } } /** Loading
core/java/android/widget/FastScroller.java +19 −11 Original line number Diff line number Diff line Loading @@ -224,6 +224,8 @@ class FastScroller { mHasPendingDrag = false; } }; private int mOldItemCount; private int mOldChildCount; /** * Used to delay hiding fast scroll decorations. Loading @@ -248,6 +250,8 @@ class FastScroller { public FastScroller(AbsListView listView) { mList = listView; mOverlay = listView.getOverlay(); mOldItemCount = listView.getCount(); mOldChildCount = listView.getChildCount(); final Context context = listView.getContext(); mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); Loading @@ -258,6 +262,7 @@ class FastScroller { final ImageView trackImage = new ImageView(context); mTrackImage = trackImage; updateLongList(mOldChildCount, mOldItemCount); int width = 0; // Add track to overlay if it has an image. Loading Loading @@ -445,20 +450,23 @@ class FastScroller { updateLayout(); } public void onItemCountChanged(int totalItemCount) { final int visibleItemCount = mList.getChildCount(); final boolean hasMoreItems = totalItemCount - visibleItemCount > 0; public void onItemCountChanged(int childCount, int itemCount) { if (mOldItemCount != itemCount || mOldChildCount != childCount) { mOldItemCount = itemCount; mOldChildCount = childCount; final boolean hasMoreItems = itemCount - childCount > 0; if (hasMoreItems && mState != STATE_DRAGGING) { final int firstVisibleItem = mList.getFirstVisiblePosition(); setThumbPos(getPosFromItemCount(firstVisibleItem, visibleItemCount, totalItemCount)); setThumbPos(getPosFromItemCount(firstVisibleItem, childCount, itemCount)); } updateLongList(visibleItemCount, totalItemCount); updateLongList(childCount, itemCount); } } private void updateLongList(int visibleItemCount, int totalItemCount) { final boolean longList = visibleItemCount > 0 && totalItemCount / visibleItemCount >= MIN_PAGES; private void updateLongList(int childCount, int itemCount) { final boolean longList = childCount > 0 && itemCount / childCount >= MIN_PAGES; if (mLongList != longList) { mLongList = longList; Loading