diff options
author | Romain Guy <romainguy@android.com> | 2010-02-25 17:32:54 -0800 |
---|---|---|
committer | Romain Guy <romainguy@android.com> | 2010-02-25 17:34:59 -0800 |
commit | 9c3184cc162ee8c10eabd3f996629a9397a1f551 (patch) | |
tree | cfbc3fc8d0539a6bbd854eba3779825b79cacf2f | |
parent | 3f3e53bc30dbf0e47c90be5cf4bd4faabda9c601 (diff) | |
download | frameworks_base-9c3184cc162ee8c10eabd3f996629a9397a1f551.zip frameworks_base-9c3184cc162ee8c10eabd3f996629a9397a1f551.tar.gz frameworks_base-9c3184cc162ee8c10eabd3f996629a9397a1f551.tar.bz2 |
Do not recyle headers and footers when measuring the ListView.
Bug #2461893
This was causing headers and footers to be in a wrong state after the first
recycling pass, which would cause them to be detached from the window. This
was in turn preventing invalidate operations from performing successfully.
-rw-r--r-- | core/java/android/widget/AbsListView.java | 4 | ||||
-rw-r--r-- | core/java/android/widget/ListView.java | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index a9b746a..bec62b1 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -4155,9 +4155,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final View[] activeViews = mActiveViews; for (int i = 0; i < childCount; i++) { View child = getChildAt(i); - AbsListView.LayoutParams lp = (AbsListView.LayoutParams)child.getLayoutParams(); + AbsListView.LayoutParams lp = (AbsListView.LayoutParams) child.getLayoutParams(); // Don't put header or footer views into the scrap heap - if (lp != null && lp.viewType != AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { + if (lp != null && lp.viewType != ITEM_VIEW_TYPE_HEADER_OR_FOOTER) { // Note: We do place AdapterView.ITEM_VIEW_TYPE_IGNORE in active views. // However, we will NOT place them into scrap views. activeViews[i] = child; diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 51a1ef2..912dd5e 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -138,7 +138,7 @@ public class ListView extends AbsListView { // the single allocated result per list view; kinda cheesey but avoids // allocating these thingies too often. - private ArrowScrollFocusResult mArrowScrollFocusResult = new ArrowScrollFocusResult(); + private final ArrowScrollFocusResult mArrowScrollFocusResult = new ArrowScrollFocusResult(); public ListView(Context context) { this(context, null); @@ -1040,7 +1040,8 @@ public class ListView extends AbsListView { childWidth = child.getMeasuredWidth(); childHeight = child.getMeasuredHeight(); - if (recycleOnMeasure()) { + if (recycleOnMeasure() && mRecycler.shouldRecycleViewType( + ((LayoutParams) child.getLayoutParams()).viewType)) { mRecycler.addScrapView(child); } } @@ -1155,7 +1156,8 @@ public class ListView extends AbsListView { } // Recycle the view before we possibly return from the method - if (recyle) { + if (recyle && recycleBin.shouldRecycleViewType( + ((LayoutParams) child.getLayoutParams()).viewType)) { recycleBin.addScrapView(child); } |