雖然工作可以不涉及編碼,但是本著對編碼的熱愛,於是在業餘時間寫了一個關於RecyclerViewAdapter高度定製的開源庫。
相信大家RecyclerView應該不會陌生,大多數開發者應該都使用上它了,它也是google推薦替換ListView的控制元件,但是用過它的同學應該都知道它在某些方面並沒有ListView使用起來方便,需要我們額外的編寫程式碼,今天就給大家介紹一個Github上面的一個開源庫,有了它讓你使用RecyclerView的時候,和ListView一樣的好用!它的名字叫做「BaseRecyclerViewAdapterHelper」,直接輸入「www.recyclerview.org」可以直接訪問。接下來不僅僅要給大家介紹它能做什麼,還要分析它的原理是如何實現。
節省Adapter大量程式碼量
效果
程式碼使用
原理分析
找到重複部分程式碼,抽取到基類,非重複部分用抽象方法代替,具體讓子類實現。
我們可以從上面的程式碼塊中看到,他繼承了BaseQuickAdapter,其實BaseQuickAdapter重寫了重複的程式碼,根據java的繼承特性,兒子繼承爸爸的財產,所以兒子很輕鬆,做的事情很少。
接下來我們再來看看關於賦值的BaseViewHolder
它裡面做了一個快取機制,避免了重複載入view,把常用的set方法全部寫好了,但是需要注意載入網路圖片這一塊需要開發者自己載入,因為考慮到實戰專案中都有自己的圖片載入庫,如果封裝在裡面就耦合了,不能強迫所有的開發者都使用框架內建的圖片載入庫,所以在使用的程式碼塊裡面,我們可以看到它是通過一個getView的方法拿到imageView物件再去通過自己的常用圖片載入框架去做相應的圖片載入。
新增點選事件
RecyclerView沒有ItemClick方法,可以在上面提過的BaseQuickAdapter裡面新增ItemClick,網上有很多寫法都是在onBindViewHolder
裡面寫,功能是可以實現但是會導致頻繁建立,應該在onCreateViewHolder()
中每次為新建的 View 設定一次就行了。如果想新增長按事件,也同理。
程式碼使用
原理分析
列表載入動畫
效果
程式碼使用
原理分析
關於開啟動畫
首先判斷是否開啟動畫,然後判斷是否是自定義動畫還是使用者選擇的自帶動畫,然後對動畫的操作元素進行遍歷執行,執行時間為300毫秒,由於上面說了每次填充資料都會呼叫,所以如何不判斷的話,就會導致上下滑動每次都會重複呼叫動畫,動畫本身是會耗費效能的。
控制載入次數
只需要新增一個mLastPosition來儲存滑動過的位置,然後判斷滑動的位置是否被滑動過,這樣就可以避免每次都新增動畫了。不過為了滿足喜歡動畫多過於效能的開發者,如果你想要每次滑動都帶動畫可以設定isFirstOnly屬性即可,預設是不開啟的。
新增頭部尾部
效果
使用程式碼
原理分析
實際上就定義多個不同型別的佈局
- 重寫getItemViewType()方法,根據需求規則給出不同的type值。
- 在onBindViewHolder()裡面根據不同holder的型別來賦予相對於的資料
- 如果有額外佈局(如:頭部尾部)需要修改getItemCount()方法的返回數量
新增頭部和尾部(額外佈局)
在上面的基礎之上再重寫getItemCount()在原本資料量上加上根據額外佈局的數量,程式碼如下
注意:如果是新增頭部
那就必須在原onBindViewHolder()
裡面position-頭部數量,因為不減去的話,那麼資料就會從第二條開始遍歷,所以要注意!
篇幅有限,今天就介紹到這裡,除了這些功能還有更多實用功能!專案持續更新中,覺得對自己有幫助的朋友可以star一下!
最後奉上github原始碼地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper
打賞支援我寫出更多好文章,謝謝!
打賞作者
打賞支援我寫出更多好文章,謝謝!