RecycledView原始碼解析

2021-10-07 16:55:09 字數 1654 閱讀 7051

recyclerview layoutmanager adapter,viewholder,itemdecoration這些和recycleview使用息息相關的類到底是什麼關係

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

onmeasure 

onlayout

sminwidthfield = view.class.getdeclaredfield("mminwidth");

choosesize

setmeasureddimension

countone       viewholder         adapter,viewholder,itemdecoration這些和recycleview使用息息相關的類到底是什麼關係

adapterdataobserver

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

onbindviewholder

oncreateviewholder

recycledviewpool復用imageviewholder

notifyitemremoved

1.cacheviews中的快取只能position相同才能復用,並且不會重新bind.

2.cacheviews滿了後會移除到recyclerpool中,並重置viewholder.

3.recyclerpool中的快取復用需要重新bind.

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...