天天看點

RecyclerView.Adapter的優化與封裝

項目結構圖
RecyclerView.Adapter的優化與封裝

主要是對baserecycleadapter和baseviewholder進行封裝。

好了,開始講課了^_^。

baserecycleadapter.class

baserecycleadapter類裡面其實沒什麼,就和普通的adapter沒什麼差別,隻是将資料的設定用抽象方法去表示,然後讓繼承類去實作結果操作。

看到上面的代碼,大家應該看到了兩個重點:

一、單擊事件的回調:

recyclerview預設是沒有像listview的onitemclick方法的,我們必須得自己去實作,我是直接給引用 的布局設定點選事件和長點選事件,這個點選事件最好是設定在oncreateviewholder方法中,因為recycleradapter初始化隻調用一次,而有些人習慣設定在onbindviewholder方法中,這樣每次更新view都要去設定一遍監聽事件,是沒有必要的操作。大家看到我在兩個事件的回調裡面設定了一個clickflag單擊标記,大家知道是為了避免什麼嗎?操作實驗過的同學應該就會知道了,假如不設定這些标志,在進行長點選操作松開手指會發現,他還會再觸發一次短單擊事件,是以為了避免長點選操作帶來的兩次回調效果,先設定clickflag為true,此時可以短點選,當長單擊操作開始時,我們設定clickflag為false,這是長單擊回調結束,進入了短單擊,發現此時clickflag是為false的,是以就不回調短單擊的事件,最後又重新設定回可短單擊效果,這部分要是不明白的可以給我留言。

二、資料傳遞用泛型

①list< ? extends basebean> data

② protected abstract void convert(baseviewholder holder, t bean);

這兩個部分都是泛型的巧用,以前不會玩這些,java打的不牢,後來看鴻洋的部落格,對于封裝這塊用的特别多,忽然發現泛型的重要性,然後重回宿舍,拿起李剛的《瘋狂java講義》狂看,看完之後,原來是這樣的啊,? extends basebean表現為集合資料裡面存儲的類型是basebean或是basebean的子類,也就是向下,如果是? super basebean 則存儲的資料類型為basebean或basebean的父類,也就是向上,大概好像是這麼了解的,如有錯誤,大家指出來喔,

我這邊存儲的資料類型model,bean都必須要繼承basebean這個父類,因為泛型傳遞,是以我就這麼做了,要是大家有什麼好的方法的話,也可以告訴告訴我,就怕沒有知識汲取。

basebean.class 和person.class
RecyclerView.Adapter的優化與封裝
baseviewholder.class

baseviewholder這個類呢一般都是拿來優化recycleview的,然後拿到這個holder來設定資料,recycleadapter的oncreateviewholder方法将填充的item布局傳回給了baseviewholder,然後将這個view設定為全局,下面的那些settext或是setimageresource等等,大家都可以自己擴充,這些方法都是提供設定view資料的。

好了,base封裝基本上完成了,接下來就是怎麼用了。

recycleadaptertest.class

最後就是泛型的強轉,然後下面調用viewholder的設定資料,将資源id和資料傳遞過去,就設定好了。

哇塞,adapter這麼少的啊,真的好爽,我都佩服自己了。

主mainactivity設定adapter就和普通設定資料一樣一樣的啦,基本沒什麼變化。

mainactivity.class

item布局就是一個textview,就沒有什麼了。

效果圖
RecyclerView.Adapter的優化與封裝

實力裝了一次,以前看别人寫這些代碼,感覺好高大上啊,其實真的沒有什麼啊=_=,自己動手,豐衣足食。暑期以來第一篇,之前忙着看 安卓優化方面的書,等看完了,有了自己的心得,再來寫一篇優化類的博文吧!!搞定!!

繼續閱讀