RecyclerView 源碼分析

Recycler:

????????Recycler的職責(zé)是管理那些已經(jīng)廢棄了的或者從RecyclerView中分離的item view用于復(fù)用。Recycler典型的用法就是當(dāng)LayoutManager去獲取Adapter中的某一項(xiàng)View的時(shí)候,如果這個(gè)View失效了,則需要重新綁定View,當(dāng)復(fù)用的View是有效的話,View就會(huì)被直接被復(fù)用。有效的View如果不主動(dòng)調(diào)用requestLayout,那么該View不需要重新測(cè)量就可以被復(fù)用。

Recycler幾個(gè)成員變量

RecycledViewPool:RecycledViewPool讓開(kāi)發(fā)者可以在多個(gè)RecyclerView之間共享View。如果你想要跨RecyclerView復(fù)用View,創(chuàng)建一個(gè)RecycledViewPool實(shí)例,然后調(diào)用setRecycledViewPool(RecycledViewPool)方法就可以了。RecyclerView會(huì)自動(dòng)創(chuàng)建一個(gè)RecycledViewPool的實(shí)例。有了RecycledViewPool的存在,就能很大程度上減少View的創(chuàng)建,提高性能。

mScrap是一個(gè)<viewType, List>的映射,mMaxScrap是一個(gè)<viewType, maxNum>的映射,我們可以調(diào)用setMaxRecycledViews方法來(lái)設(shè)置每種viewType的view容量。從源碼可以看出,如果viewType類(lèi)型的list的size大于制定的最大數(shù)字的話,會(huì)先從列表的末尾開(kāi)始丟棄超出的部分。調(diào)用getRecycledView(int viewType)方法呢,可以將scrapHeap中的最后一項(xiàng)移除并返回viewType對(duì)應(yīng)的List的末尾項(xiàng)。這里需要注意的是,因?yàn)槭强鏡ecyclerView進(jìn)行操作,所以要特別注意對(duì)于同一個(gè)RecycledViewPool,對(duì)ViewType的定義要統(tǒng)一,因?yàn)檫@里是根據(jù)viewType來(lái)取ViewHolder的。?

ViewCacheExtension:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容