From 6f663c1a3c4d4a23bc71302add27b3d03d7d507b Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Mon, 30 Apr 2012 16:59:02 -0700 Subject: [PATCH] Fix a bug in ListView where touch scrolling could skip a data set change Bug 2597058 ListView's touch scrolling can query the adapter for new views. As we now flush pending touch events before running layout/draw traversals (when we normally bring ListView back in sync), this can now happen more often. Resync data before executing a scroll if a data set change is pending. Change-Id: I3e4eba4c2537911ba9cb3393ee4d9e68e46f84bb --- core/java/android/widget/AbsListView.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index a2531f8601744..449870ea9508a 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -3179,6 +3179,13 @@ public abstract class AbsListView extends AdapterView implements Te mActivePointerId = ev.getPointerId(pointerIndex); } final int y = (int) ev.getY(pointerIndex); + + if (mDataChanged) { + // Re-sync everything if data has been changed + // since the scroll operation can query the adapter. + layoutChildren(); + } + switch (mTouchMode) { case TOUCH_MODE_DOWN: case TOUCH_MODE_TAP: