我的簡書地:http://www.jianshu.com/users/f958e66439f0/latest_articles
雖然工作可以不觸及編碼,但是本著對編碼的酷愛,因而在業余時間寫了1個關于RecyclerViewAdapter高度定制的開源庫。
相信大家RecyclerView應當不會陌生,大多數開發者應當都使用上它了,它也是google推薦替換ListView的控件,但是用過它的同學應當都知道它在某些方面并沒有ListView使用起來方便,需要我們額外的編寫代碼,今天就給大家介紹1個Github上面的1個開源庫,有了它讓你使用RecyclerView的時候,和ListView1樣的好用!它的名字叫做「BaseRecyclerViewAdapterHelper」,直接輸入「www.recyclerview.org」可以直接訪問。接下來不單單要給大家介紹它能做甚么,還要分析它的原理是如何實現。
找到重復部份代碼,抽取到基類,非重復部份用抽象方法代替,具體讓子類實現。
我們可以從上面的代碼塊中看到,他繼承了BaseQuickAdapter,其實BaseQuickAdapter重寫了重復的代碼,根據java的繼承特性,兒子繼承爸爸的財產,所以兒子很輕松,做的事情很少。
接下來我們再來看看關于賦值的BaseViewHolder
它里面做了1個緩存機制,避免了重復加載view,把經常使用的set方法全部寫好了,但是需要注意加載網絡圖片這1塊需要開發者自己加載,由于斟酌到實戰項目中都有自己的圖片加載庫,如果封裝在里面就耦合了,不能逼迫所有的開發者都使用框架內置的圖片加載庫,所以在使用的代碼塊里面,我們可以看到它是通過1個getView的方法拿到imageView對象再去通過自己的經常使用圖片加載框架去做相應的圖片加載。
RecyclerView沒有ItemClick方法,可以在上面提過的BaseQuickAdapter里面添加ItemClick,網上有很多寫法都是在onBindViewHolder
里面寫,功能是可以實現但是會致使頻繁創建,應當在onCreateViewHolder()
中每次為新建的 View 設置1次就好了。如果想添加長按事件,也同理。
首先判斷是不是開啟動畫,然后判斷是不是是自定義動畫還是用戶選擇的自帶動畫,然后對動畫的操作元素進行遍歷履行,履行時間為300毫秒,由于上面說了每次填充數據都會調用,所以如何不判斷的話,就會致使上下滑動每次都會重復調用動畫,動畫本身是會耗費性能的。
只需要添加1個mLastPosition來存儲滑動過的位置,然后判斷滑動的位置是不是被滑動過,這樣就能夠避免每次都添加動畫了。不過為了滿足喜歡動畫多過于性能的開發者,如果你想要每次滑動都帶動畫可以設置isFirstOnly屬性便可,默許是不開啟的。
實際上就定義多個不同類型的布局
1. 重寫getItemViewType()方法,根據需求規則給出不同的type值。
2. 在onBindViewHolder()里面根據不同holder的類型來賦予相對的數據
3. 如果有額外布局(如:頭部尾部)需要修改getItemCount()方法的返回數量
在上面的基礎之上再重寫getItemCount()在本來數據量上加上根據額外布局的數量,代碼以下
注意:如果是添加頭部
那就必須在原onBindViewHolder()
里面position-頭部數量,由于不減去的話,那末數據就會從第2條開始遍歷,所以要注意!
篇幅有限,今天就介紹到這里,除這些功能還有更多實用功能!項目延續更新中,覺得對自己有幫助的朋友可以star1下!
最后奉上github源碼地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper