Fix RecyclerView caching.
b/15314857
Change-Id: I005d709e877d3433a1d52aa8af3480d4f1a18323
diff --git a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
index 73a9e62..f97fa51 100644
--- a/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
+++ b/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java
@@ -2519,8 +2519,8 @@
"Scrapped or attached views may not be recycled.");
}
- if (mCachedViews.size() < mViewCacheMax && !holder.isInvalid() &&
- (mInPreLayout || !holder.isRemoved())) {
+ boolean cached = false;
+ if (!holder.isInvalid() && (mInPreLayout || !holder.isRemoved())) {
// Retire oldest cached views first
if (mCachedViews.size() == mViewCacheMax && !mCachedViews.isEmpty()) {
for (int i = 0; i < mCachedViews.size(); i++) {
@@ -2533,8 +2533,12 @@
}
}
}
- mCachedViews.add(holder);
- } else if (holder.isRecyclable()) {
+ if (mCachedViews.size() < mViewCacheMax) {
+ mCachedViews.add(holder);
+ cached = true;
+ }
+ }
+ if (!cached && holder.isRecyclable()) {
getRecycledViewPool().putRecycledView(holder);
dispatchViewRecycled(holder);
}