diff options
author | Alan Viverette <alanv@google.com> | 2014-02-26 18:16:36 -0800 |
---|---|---|
committer | Alan Viverette <alanv@google.com> | 2014-02-26 18:16:36 -0800 |
commit | e6be9c78b55c46e221ebc3cd6b08f1be3588b1d7 (patch) | |
tree | d94a032c71408f807e24c4a1eef272be5704d4bb | |
parent | af7c240b99506d2c81a72be738eb270ecaa39699 (diff) | |
download | frameworks_base-e6be9c78b55c46e221ebc3cd6b08f1be3588b1d7.zip frameworks_base-e6be9c78b55c46e221ebc3cd6b08f1be3588b1d7.tar.gz frameworks_base-e6be9c78b55c46e221ebc3cd6b08f1be3588b1d7.tar.bz2 |
Always set item type on obtained ListView item views
If a view is scrapped without layout params being set, it will
incorrectly be recycled as item type 0.
BUG: 13212603
Change-Id: I2a42c04ec5065067ab260a0a8afb07207db729f6
-rw-r--r-- | core/java/android/widget/AbsListView.java | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 0b78e0a..66580f8 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2313,6 +2313,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te // If we failed to re-bind the data, scrap the obtained view. if (updatedView != transientView) { + setItemViewLayoutParams(updatedView, position); mRecycler.addScrapView(updatedView, position); } } @@ -2343,19 +2344,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te child.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); } - if (mAdapterHasStableIds) { - final ViewGroup.LayoutParams vlp = child.getLayoutParams(); - LayoutParams lp; - if (vlp == null) { - lp = (LayoutParams) generateDefaultLayoutParams(); - } else if (!checkLayoutParams(vlp)) { - lp = (LayoutParams) generateLayoutParams(vlp); - } else { - lp = (LayoutParams) vlp; - } - lp.itemId = mAdapter.getItemId(position); - child.setLayoutParams(lp); - } + setItemViewLayoutParams(child, position); if (AccessibilityManager.getInstance(mContext).isEnabled()) { if (mAccessibilityDelegate == null) { @@ -2371,6 +2360,24 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te return child; } + private void setItemViewLayoutParams(View child, int position) { + final ViewGroup.LayoutParams vlp = child.getLayoutParams(); + LayoutParams lp; + if (vlp == null) { + lp = (LayoutParams) generateDefaultLayoutParams(); + } else if (!checkLayoutParams(vlp)) { + lp = (LayoutParams) generateLayoutParams(vlp); + } else { + lp = (LayoutParams) vlp; + } + + if (mAdapterHasStableIds) { + lp.itemId = mAdapter.getItemId(position); + } + lp.viewType = mAdapter.getItemViewType(position); + child.setLayoutParams(lp); + } + class ListItemAccessibilityDelegate extends AccessibilityDelegate { @Override public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) { |