優雅地重新整理RecyclerView

小生空白憶發表於2018-10-24

前言

還是那句話,RecyclerView的viewType增多,邏輯變複雜,幾個月後,你確定還能理清思路嗎?假設我們服務端是多個介面返回資料,你確定能正確重新整理相應type嗎?想一個RecyclerView高效快捷管理整個介面嗎?你還在使用notifyDataSetChanged無腦重新整理嗎?你想單個viewType在loadingView,dataView,errorView自如切換嗎?如果你遲疑了,那你不妨試試本庫。

特點

  • 與Adapter為組合關係,可配合大多數Adapter
  • 一行程式碼重新整理相應viewType
  • 支援facebook的shimmer載入效果
  • 支援粘性頭
  • 支援非同步重新整理,可擴充套件(如配合RxAndroid)
  • 支援載入相應type錯誤頁面
  • 支援高頻率重新整理(流暢,非同步執行)

效果

線性排布

image

方格排布

image

關鍵字高亮

image

重新整理錯誤頁面

image

高頻率重新整理

image

更新內容

  • 支援重新整理type錯誤頁面(可自定義)
  • 支援同時重新整理多個type(非同步,高頻率)
  • 鏈式註冊資源
  • 支援重新整理單個資料
  • 提供helper的清除單個type,清除整個介面api
  • 提供getHeaderId的預設實現抽象類

支援重新整理type錯誤頁面(可自定義)

image.png

一行程式碼搞定,前者提供實體類是考慮有些使用者需要根據實體資料屬性去更新,因此錯誤頁面的layoutId是使用者提供的。

支援同時重新整理多個type(非同步,高頻率)

image.png

這裡採用的是佇列的形式管理重新整理,提供清空佇列的Api。

鏈式註冊資源

image.png

由於引數越來越多,這裡採用了較為流行的鏈式註冊,內部通過ResourcesManager管理所有資源。

**注:**原來的註冊方式已設定為過時,請及時更新,不出2個版本將移除。

支援重新整理單個資料

image.png

可能某個type只有一個實體資料管理著整個type

image.png

可傳T的子類集合

提供helper的清除單個type,清除整個介面api

image.png

提供getHeaderId的預設實現抽象類

假設你不實現粘性頭而強制要寫getHeaderId確實挺討厭的,由於現在android還不是很好地相容java8,因此暫時提供DefaultMultiHeaderEntity。

使用注意點

type 取值範圍

  • level [0,+∞)
  • 資料型別 [0,1000)
  • 頭型別 [-1000,0)
  • shimmer資料型別 [-2000,-1000)
  • shimmer頭型別 [-3000,-2000)
  • error型別 [-4000,-3000)

常量差值

image.png

結束

庫多多少少也更新幾個版本了,你的意見,你的建議,你的star,你的分享,一直是我前進的動力。還有一點要說的就是現在關於LayoutManager,RecyclerView,Adapter的流派很多,我們更關注於資料的優雅重新整理。

gradle依賴

image.png

PS :有興趣的加入Android工程師交流QQ群:752016839 主要針對Android開發人員提升自己,突破瓶頸,相信你來學習,會有提升和收穫。

相關文章