summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2014-02-19 15:25:10 -0800
committerAlan Viverette <alanv@google.com>2014-02-19 15:25:10 -0800
commitff699570f62113b4df5b0efd74b9df8b9dbcd1a9 (patch)
treeca4cfafce7ce4138b1003e6306bf09c060979509
parent621e1e8493f1a7b0fb5d5390067663635ed24e8c (diff)
downloadframeworks_base-ff699570f62113b4df5b0efd74b9df8b9dbcd1a9.zip
frameworks_base-ff699570f62113b4df5b0efd74b9df8b9dbcd1a9.tar.gz
frameworks_base-ff699570f62113b4df5b0efd74b9df8b9dbcd1a9.tar.bz2
Check item type before re-binding transient state views
BUG: 12701797 Change-Id: I180613cc342d24b63f80fd699937c7543c38fc20
-rw-r--r--core/java/android/widget/AbsListView.java14
1 files changed, 10 insertions, 4 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 93b95bf..7ea0613 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2309,10 +2309,16 @@ public abstract class AbsListView extends AdapterView<ListAdapter> 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.