diff options
author | Adam Powell <adamp@google.com> | 2012-05-23 17:49:21 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-05-23 17:49:21 -0700 |
commit | 75ac4e8479a415b4bec657b8f333e38d160b6b3e (patch) | |
tree | 35be87437cc3046c3a2f8988a87c7d444ff2b282 /core | |
parent | a587b890bb0c2f800fe4dfd3267f26366d00d32c (diff) | |
parent | 161abf3d44feebb8462f7d0cbee81574d666234b (diff) | |
download | frameworks_base-75ac4e8479a415b4bec657b8f333e38d160b6b3e.zip frameworks_base-75ac4e8479a415b4bec657b8f333e38d160b6b3e.tar.gz frameworks_base-75ac4e8479a415b4bec657b8f333e38d160b6b3e.tar.bz2 |
Merge "Fix a bug with deferred position scrolling in lists while data changes are pending" into jb-dev
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/widget/AbsListView.java | 14 | ||||
-rw-r--r-- | core/java/android/widget/GridView.java | 4 | ||||
-rw-r--r-- | core/java/android/widget/ListView.java | 4 |
3 files changed, 16 insertions, 6 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 6cee0f3..9abe72b 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -579,6 +579,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te private InputConnectionWrapper mPublicInputConnection; private Runnable mClearScrollingCache; + Runnable mPositionScrollAfterLayout; private int mMinimumVelocity; private int mMaximumVelocity; private float mVelocityScale = 1.0f; @@ -1910,6 +1911,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te removeAllViewsInLayout(); mFirstPosition = 0; mDataChanged = false; + mPositionScrollAfterLayout = null; mNeedSync = false; mOldSelectedPosition = INVALID_POSITION; mOldSelectedRowId = INVALID_ROW_ID; @@ -4248,11 +4250,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (mDataChanged) { // Wait until we're back in a stable state to try this. - post(new Runnable() { + mPositionScrollAfterLayout = new Runnable() { @Override public void run() { start(position); } - }); + }; return; } @@ -4299,11 +4301,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (mDataChanged) { // Wait until we're back in a stable state to try this. - post(new Runnable() { + mPositionScrollAfterLayout = new Runnable() { @Override public void run() { start(position, boundPosition); } - }); + }; return; } @@ -4376,11 +4378,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (mDataChanged) { // Wait until we're back in a stable state to try this. final int postOffset = offset; - post(new Runnable() { + mPositionScrollAfterLayout = new Runnable() { @Override public void run() { startWithOffset(position, postOffset, duration); } - }); + }; return; } diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 0a40d5e..8975109 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -1275,6 +1275,10 @@ public class GridView extends AbsListView { mLayoutMode = LAYOUT_NORMAL; mDataChanged = false; + if (mPositionScrollAfterLayout != null) { + post(mPositionScrollAfterLayout); + mPositionScrollAfterLayout = null; + } mNeedSync = false; setNextSelectedPositionInt(mSelectedPosition); diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index c62b62b..d2e55d9 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -1691,6 +1691,10 @@ public class ListView extends AbsListView { mLayoutMode = LAYOUT_NORMAL; mDataChanged = false; + if (mPositionScrollAfterLayout != null) { + post(mPositionScrollAfterLayout); + mPositionScrollAfterLayout = null; + } mNeedSync = false; setNextSelectedPositionInt(mSelectedPosition); |