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.