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);
             }