From df262cd922a7f337c50bec441d1d12161f701587 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Fri, 7 Mar 2014 14:30:11 -0800 Subject: [PATCH] DO NOT MERGE Check item type before re-binding transient state views BUG: 12701797 Change-Id: I180613cc342d24b63f80fd699937c7543c38fc20 --- core/java/android/widget/AbsListView.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 42c949ab65da1..6dbcb53379ec4 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2233,10 +2233,16 @@ public abstract class AbsListView extends AdapterView implements Te // data and discard the view if we fail. final View transientView = mRecycler.getTransientStateView(position); if (transientView != null) { - final View updatedView = mAdapter.getView(position, transientView, this); - if (updatedView != transientView) { - // Failed to re-bind the data, scrap the obtained view. - mRecycler.addScrapView(updatedView, position); + final LayoutParams params = (LayoutParams) transientView.getLayoutParams(); + + // If the view type hasn't changed, attempt to re-bind the data. + if (params.viewType == mAdapter.getItemViewType(position)) { + final View updatedView = mAdapter.getView(position, transientView, this); + + // If we failed to re-bind the data, scrap the obtained view. + if (updatedView != transientView) { + mRecycler.addScrapView(updatedView, position); + } } // Scrap view implies temporary detachment.