Merge "DO NOT MERGE Quick fix for updating the FastScroller long list property" into klp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6e6dc23c69
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -224,6 +224,8 @@ class FastScroller {
|
||||
mHasPendingDrag = false;
|
||||
}
|
||||
};
|
||||
private int mOldItemCount;
|
||||
private int mOldChildCount;
|
||||
|
||||
/**
|
||||
* Used to delay hiding fast scroll decorations.
|
||||
@@ -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();
|
||||
@@ -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.
|
||||
@@ -445,20 +450,23 @@ class FastScroller {
|
||||
updateLayout();
|
||||
}
|
||||
|
||||
public void onItemCountChanged(int totalItemCount) {
|
||||
final int visibleItemCount = mList.getChildCount();
|
||||
final boolean hasMoreItems = totalItemCount - visibleItemCount > 0;
|
||||
if (hasMoreItems && mState != STATE_DRAGGING) {
|
||||
final int firstVisibleItem = mList.getFirstVisiblePosition();
|
||||
setThumbPos(getPosFromItemCount(firstVisibleItem, visibleItemCount, totalItemCount));
|
||||
}
|
||||
public void onItemCountChanged(int childCount, int itemCount) {
|
||||
if (mOldItemCount != itemCount || mOldChildCount != childCount) {
|
||||
mOldItemCount = itemCount;
|
||||
mOldChildCount = childCount;
|
||||
|
||||
updateLongList(visibleItemCount, totalItemCount);
|
||||
final boolean hasMoreItems = itemCount - childCount > 0;
|
||||
if (hasMoreItems && mState != STATE_DRAGGING) {
|
||||
final int firstVisibleItem = mList.getFirstVisiblePosition();
|
||||
setThumbPos(getPosFromItemCount(firstVisibleItem, childCount, itemCount));
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user