diff options
| -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); |
