am d5b18387: Merge "Ensure partially-detached AbsListView children are removed" into mnc-dev

* commit 'd5b18387abed3d8487617982c20e8b4ffcab659c':
  Ensure partially-detached AbsListView children are removed
This commit is contained in:
Alan Viverette
2015-06-25 22:27:37 +00:00
committed by Android Git Automerger

View File

@@ -6605,6 +6605,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
void addScrapView(View scrap, int position) {
final AbsListView.LayoutParams lp = (AbsListView.LayoutParams) scrap.getLayoutParams();
if (lp == null) {
// Can't recycle, skip the scrap heap.
getSkippedScrap().add(scrap);
return;
}
@@ -6614,6 +6616,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
// should otherwise not be recycled.
final int viewType = lp.viewType;
if (!shouldRecycleViewType(viewType)) {
// Can't recycle, skip the scrap heap.
getSkippedScrap().add(scrap);
return;
}
@@ -6633,22 +6637,19 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
// If the adapter has stable IDs, we can reuse the view for
// the same data.
if (mTransientStateViewsById == null) {
mTransientStateViewsById = new LongSparseArray<View>();
mTransientStateViewsById = new LongSparseArray<>();
}
mTransientStateViewsById.put(lp.itemId, scrap);
} else if (!mDataChanged) {
// If the data hasn't changed, we can reuse the views at
// their old positions.
if (mTransientStateViews == null) {
mTransientStateViews = new SparseArray<View>();
mTransientStateViews = new SparseArray<>();
}
mTransientStateViews.put(position, scrap);
} else {
// Otherwise, we'll have to remove the view and start over.
if (mSkippedScrap == null) {
mSkippedScrap = new ArrayList<View>();
}
mSkippedScrap.add(scrap);
getSkippedScrap().add(scrap);
}
} else {
if (mViewTypeCount == 1) {
@@ -6663,6 +6664,13 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
}
}
private ArrayList<View> getSkippedScrap() {
if (mSkippedScrap == null) {
mSkippedScrap = new ArrayList<>();
}
return mSkippedScrap;
}
/**
* Finish the removal of any views that skipped the scrap heap.
*/