RecycledView源碼解析

 

RecyclerView LayoutManager Adapter,ViewHolder,ItemDecoration這些和RecycleView使用息息相關的類到底是什麼關係

ItemDecoration這些和RecycleView使用息息相關的類到底是什麼關係

onMeasure 


onLayout
        sMinWidthField = View.class.getDeclaredField("mMinWidth");
        
        chooseSize
        
        setMeasuredDimension
        countOne       ViewHolder         Adapter,ViewHolder,ItemDecoration這些和RecycleView使用息息相關的類到底是什麼關係
        
        AdapterDataObserver {
        
        
        
        
        
        dispatchLayoutStep1      }

        dispatchLayoutStep2                        getViewForPosition
        
        createViewHolder
        
        onLayout
        
1.RecyclerView是將繪製流程交給LayoutManager處理,如果沒有設置不會測量子View。
        
2.繪製流程是區分正向繪製和倒置繪製。

3.繪製是先確定錨點,然後向上繪製,向下繪製,fill()至少會執行兩次,
如果繪製完還有剩餘空間,則會再執行一次fill()方法。

4.LayoutManager獲得View是從RecyclerView中的Recycler.next()方法獲得,
涉及到RecyclerView的緩存策略,如果緩存沒有拿到,則走我們自己重寫的onCreateView方法。

5.如果RecyclerView寬高沒有寫死,onMeasure就會執行完子View的measure和Layout方法,
onLayout僅僅是重置一些參數,如果寫死,子View的measure和layout會延後到onLayout中執行。


RecycledViewPool  createViewHolder 

mAttachedScrap 0-9,9-0 mCacheViews ViewCacheExtension RecycledViewPool

mCacheViews    recyclerInstance

Recycle removeViewAt     ScrapViews   detachViewAt  scrapView ViewHolder


recycleCachedViewAt addViewHolderToRecycledViewPool 
 

      mAdapter.bindViewHolder(holder, offsetPosition);

            https://upload-images.jianshu.io/upload_images/7866586-0049e05aafd34a1d.png?imageMogr2/auto-orient/strip|imageView2/2/w/706/format/webp
            onBindViewHolder

onCreateViewHolder

RecycledViewPool複用ImageViewHolder


notifyItemRemoved


1.CacheViews中的緩存只能position相同才能複用,並且不會重新Bind.
2.CacheViews滿了後會移除到RecyclerPool中,並重置ViewHolder.
3.RecyclerPool中的緩存複用需要重新Bind.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章