每當我們使用recyclerview寫一個清單的時候,都需要寫類似的如下代碼:
那麼,我們一般必不可少的是寫一個adapter,比如,為了支援多種類型,我們需要重寫getitemviewtype、oncreateviewholder、onbindviewholder等方法。比如:
按照上述寫法,每當我們需要增加一種類型的時候,都需要修改testrecycleradapter的代碼,在oncreateviewholder等方法中添加對應的代碼。後來大家覺得這個挺煩的,然後就把oncreateviewholder中的switch語句放到工廠類當中,這一定層度上緩解了修改adapter的頻率。那麼,我們能不能寫一個相對通用的adapter呢?
我們希望做到如下目标:
1).adapter通用化,無需每次建立adapter
2).item(cell)的元件是插件式的,解耦,并可複用
用代碼描述為:
插件式的通用xcorerecycleradapter的原理圖如下:

每當我們需要添加一個新的類型時,隻需要一下幾步:
1.建立一個todoitemuicomponent元件,繼承自xcoreitemuicomponent
2.注冊新增的元件todoitemuicomponent
3.資料源實作idatacomponent接口
getviewtype群組件todoitemuicomponent的getviewtype比對即可;
這樣,每次新增一種新的類型的item時,無需修改adapter的代碼。并且,item的元件是可複用的。
那麼具體怎麼設計的呢?
首先對資料源進行抽象:在adapter清單中,需要根據資料源data的不同類型,選擇不同的viewholder。是以,資料源必須有一個gettype的方法。
itemuicomponent元件負責某一類type的管理。為了做到插件式,它必須實作的方法有:
oncreateview方法
該方法是用于生成item的根view的。當adapter調用oncreateviewholder時,該方法會被調用。注意,子view的初始化,不要寫在oncreateview中。需要寫在onviewcreated方法中。
onviewcreated方法
建立完itemcomponent之後,就會立即回調該方法,view的初始化請寫在這裡。
getviewtype方法
該方法是為了和資料源進行關聯的,資料源的getviewtype方法群組件的getviewtype方法的值一緻時,即完成比對。
bindview方法
該方法會在adapter回調onbindviewholder
資料源和item元件都已經定義好,那麼,核心的xcorerecycleradapter源碼應該怎麼做呢?
本篇部落客要是介紹通用的xcorerecycleradapter引擎,極大提高了adapter的複用率,讓開發集中把精力集中在必要的業務代碼上,提高開發效率。另外,與xcorerecycleradapter引擎相配套的還有ui元件化、資料控制架構xcoreredux、資料綁定等。請參考下一遍部落格:《android redux實踐與ui元件化:xcoreredux架構》(ing...)