summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/AbsListView.java14
-rw-r--r--core/java/android/widget/GridView.java4
-rw-r--r--core/java/android/widget/ListView.java4
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);