很想給大家分享這個開源項目,但是由于工作的關系,沒有抽出空,但還是趁着工作間隙寫下了這篇部落格。
lrecyclerview是支援addheaderview、 addfooterview、下拉重新整理、分頁加載資料的recyclerview。
它對 recyclerview 控件進行了拓展,給recyclerview增加headerview、footerview,并且不需要對你的adapter做任何修改。
下拉重新整理、滑動到底部自動加載下頁資料;
可以友善添加header和footer;
頭部下拉樣式可以自定義;
具備item點選和長按事件。
網絡錯誤加載失敗點選footer重新請求資料;
可以動态為footerview賦予不同狀态(加載中、加載失敗、滑到最底等)。
如果我比别人看得遠些,那是因為我站在巨人們的肩上。 (牛頓)
注意:
mheaderandfooterrecyclerviewadapter = new headerandfooterrecyclerviewadapter(this, mdataadapter);
headerandfooterrecyclerviewadapter提供了一些實用的功能,使用者不用關心它的實作,隻需構造的時候把自己的mdataadapter以參數形式傳進去即可。
為了大家使用友善,将需要用的方法統一封裝到接口lscrolllistener中。
lscrolllistener實作了nrefresh()、onscrollup()、onscrolldown()、onbottom()、onscrolled五個事件,如下所示:
onrefresh()——recyclerview下拉重新整理事件;
onscrollup()——recyclerview向上滑動的監聽事件;
onscrolldown()——recyclerview向下滑動的監聽事件;
onbottom()——recyclerview滑動到底部的監聽事件;
onscrolldown()——recyclerview正在滾動的監聽事件;
從上面的lscrolllistener介紹中就可以看出,實作加載更多隻要在onbottom()接口中處理即可。
為了達到和listview的下拉重新整理效果,本項目沒有借助swiperefreshlayout控件,而是在自定義recyclerview頭部實作的重新整理效果。
設定加載樣式:
avloadingindicatorview庫有多少效果,lrecyclerview就支援多少下拉重新整理效果,當然你也可以自定義下拉效果。
效果圖:
下拉重新整理邏輯處理:
從上面的lscrolllistener介紹中就可以看出,實作下拉重新整理隻要在onrefresh()接口中處理即可。
加載資料時如果網絡異常或者斷網,lrecyclerview為你提供了重新加載的機制。
網絡異常出錯代碼處理如下:
上面的mfooterclick就是我們點選底部的footer時的邏輯處理事件,很顯然我們還是在這裡做重新請求資料操作。
在hongyang前輩的部落格中有下描述:
click and longclick 不過一個挺郁悶的地方就是,系統沒有提供clicklistener和longclicklistener。
不過我們也可以自己去添加,隻是會多了些代碼而已。
實作的方式比較多,你可以通過mrecyclerview.addonitemtouchlistener去監聽然後去判斷手勢, 當然你也可以通過adapter中自己去提供回調,這裡我們選擇後者,前者的方式,大家有興趣自己去實作。
hongyang大神選擇了後者,lrecyclerview早期選擇了前者,經過實踐總結,在adapter中實作點選事件會好點。
先看下怎麼使用:
原理就是實作viewholder.itemview的點選和長按事件。由于代碼過多就不貼出來了。
viewholder.itemview是recyclerview.adapter中本身就具有的,不用額外定義。
源碼如下:
注意布局檔案:
介紹完了lrecyclerview,似乎還少些什麼,對了,那就是adapter了。
為了友善大家使用,分享個封裝過的adapter。
listbaseadapter使用了泛型,簡單友善,消除了強制類型轉換。
使用如下:
listbaseadapter雖然功能不強大,但是使用很友善。
lrecyclerview使用友善簡單,無論你添加多少header和footer,你都不用擔心position的問題,除了友善還是友善。
如果大家使用過程中有任何問題,請留言,我會及時修正。
後記:如果後續再增加功能,請詳細看github上面的項目介紹,将不在部落格裡面更新。