1. 程式人生 > >RecyclerView解決條目錯亂以及圖片閃越+三級快取機制

RecyclerView解決條目錯亂以及圖片閃越+三級快取機制

RecyclerView導致條目錯亂的原因:viewHolder的複用,一個複用的ViewHolder他裡邊的View有些屬性已經被修改了,所以新的item在使用服用的viewHolder時,那些被修改的viewHolder裡邊的屬性還依然存在,所以會導致新的item也應用到了原來的viewHolder屬性,導致出現錯亂 解決recyclerView載入圖片閃越問題和圖片錯亂的問題 圖片閃越:在onBindView方法中給圖片設定站點陣圖

圖片錯亂:一種是在onViewRecycle方法中取消載入的圖片的非同步任務,第二種是在onBindViewHolder方法中給ImageView設定Tag,在設定圖片的時候判斷Tag如果沒有變化才設定圖片。

Recycler類的內部成員變數 RecyclerView快取機制總結:主要是三步 主要靠三個內部類來完成,Recycler,ViewCacheExtension,RecyclerViewPool: 1、首先通過 recycler.getViewForPosition()方法,該方法返回ViewHolder物件,通過原始碼可以知道,該方法會檢查mAttachedScrap和一級快取列表mCachedViews,如果有則返回ViewHolder進行復用。
2、然後呼叫ViewCacheExtension.getViewForPositionAndType()方法,注意這個方法是抽象方法,需要開發者進行重寫。 3、最後檢查RecyclerViewPool是否有ViewHolder。 注意:上述的三個步驟中,只要有一個返回了ViewHolder,就不會在進行後邊的步驟了。 最後:快取的數量:預設的一級快取中,mCachedViews中可以快取的ViewHolder的個數是2; 預設的快取池中的快取數量是 5; 所以在快取時,會先檢測一級快取是否滿了,如果沒滿就add進去,如果滿了就加入到三級快取Recyclerpool