summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2012-05-23 17:49:21 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-05-23 17:49:21 -0700
commit75ac4e8479a415b4bec657b8f333e38d160b6b3e (patch)
tree35be87437cc3046c3a2f8988a87c7d444ff2b282 /core
parenta587b890bb0c2f800fe4dfd3267f26366d00d32c (diff)
parent161abf3d44feebb8462f7d0cbee81574d666234b (diff)
downloadframeworks_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.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);