Loading core/java/android/widget/AbsListView.java +4 −3 Original line number Diff line number Diff line Loading @@ -2104,16 +2104,17 @@ 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 (mFastScroll != null && (mItemCount != mOldItemCount || mDataChanged)) { mFastScroll.onItemCountChanged(mItemCount); // TODO: Move somewhere sane. This doesn't belong in onLayout(). if (mFastScroll != null) { mFastScroll.onItemCountChanged(childCount, mItemCount); } layoutChildren(); Loading core/java/android/widget/FastScroller.java +20 −12 Original line number Diff line number Diff line Loading @@ -205,6 +205,9 @@ class FastScroller { private long mPendingDrag = -1; private int mScaledTouchSlop; private int mOldItemCount; private int mOldChildCount; /** * Used to delay hiding fast scroll decorations. */ Loading @@ -227,6 +230,8 @@ class FastScroller { public FastScroller(AbsListView listView, int styleResId) { mList = listView; mOldItemCount = listView.getCount(); mOldChildCount = listView.getChildCount(); final Context context = listView.getContext(); mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); Loading Loading @@ -258,7 +263,7 @@ class FastScroller { overlay.add(mSecondaryText); getSectionsFromIndexer(); updateLongList(listView.getChildCount(), listView.getCount()); updateLongList(mOldChildCount, mOldItemCount); setScrollbarPosition(listView.getVerticalScrollbarPosition()); postAutoHide(); } Loading Loading @@ -484,20 +489,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 +4 −3 Original line number Diff line number Diff line Loading @@ -2104,16 +2104,17 @@ 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 (mFastScroll != null && (mItemCount != mOldItemCount || mDataChanged)) { mFastScroll.onItemCountChanged(mItemCount); // TODO: Move somewhere sane. This doesn't belong in onLayout(). if (mFastScroll != null) { mFastScroll.onItemCountChanged(childCount, mItemCount); } layoutChildren(); Loading
core/java/android/widget/FastScroller.java +20 −12 Original line number Diff line number Diff line Loading @@ -205,6 +205,9 @@ class FastScroller { private long mPendingDrag = -1; private int mScaledTouchSlop; private int mOldItemCount; private int mOldChildCount; /** * Used to delay hiding fast scroll decorations. */ Loading @@ -227,6 +230,8 @@ class FastScroller { public FastScroller(AbsListView listView, int styleResId) { mList = listView; mOldItemCount = listView.getCount(); mOldChildCount = listView.getChildCount(); final Context context = listView.getContext(); mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); Loading Loading @@ -258,7 +263,7 @@ class FastScroller { overlay.add(mSecondaryText); getSectionsFromIndexer(); updateLongList(listView.getChildCount(), listView.getCount()); updateLongList(mOldChildCount, mOldItemCount); setScrollbarPosition(listView.getVerticalScrollbarPosition()); postAutoHide(); } Loading Loading @@ -484,20 +489,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