1. 程式人生 > >BRVAH(讓RecyclerView變得更高效)(1)

BRVAH(讓RecyclerView變得更高效)(1)

如果 體驗 頁面 一行代碼 快速 settag comment 接下來 移動

本文來自網易雲社區

作者:吳思博


對於RecyclerView, 我們重復編寫著那一個又一個的列表界面,有的要分組,有的要添加廣告頭部、有的要不同類型item排列、等等需求,主要代碼有大部分是重復的,如果有一個框架能夠幫快速的解決各種需求,那該多好。

BRVAH是GitHub上一個強大的RecyclerAdapter框架,它能節約開發者大量的開發時間,它集成了大部分列表常用需求解決方案。 該框架於2016年4月10號發布,至今,經歷了700多次叠代。


presentation by 吳思博


github:https://github.com/CymChad/BaseRecyclerViewAdapterHelper


official website:www.recyclerview.org

Author(Brvah) blog:http://www.jianshu.com/u/f958e66439f0


它能幹嗎?


解放你的雙手,讓你少碼代碼!

列表、子布局


一行代碼輕松切換5種動畫

讓你感覺又回到ListView時代!

哼、列表需求來呀!

它帶來了什麽好處?


提高效率

BRVAH 是 Github 上的一個很棒的開源項目,主要作用是幫助我們更加高效的使用 Recyclerview 控件,處理項目中常見需求的 Adapter,使用起來非常方便。

BRVAH 主要是針對 Adapter 來設計的,為我們提供了一般情況下的BaseQuickAdapter,和幾個特定需求下的Adapter,BaseMultiItemQuickAdapter用於復雜類布局列表;BaseItemDraggableAdapter 用於拖拽移動和滑動刪除類列表; BaseSectionQuickAdapter用於帶 Section 頭部 View 的列表。


一、框架引入:

技術分享圖片

二、基本使用

Activity代碼:(和普通的一樣)

技術分享圖片

正常的adapter寫法:

onCreateViewHolder(這個方法主要生成為每個Item inflater出一個View,方法返回的是一個ViewHolder。 方法是把View直接封裝在ViewHolder中,然後我們面向的是ViewHolder這個實例,這個ViewHolder需要我們自己去編寫。直接省去了當初Listview的convertView.setTag(holder)和convertView.getTag()這些繁瑣的步驟。)和onBindViewHolder(這個方法主要用於適配渲染數據到View中。方法提供給你了一個viewHolder,而不是原來的convertView)等方法。

技術分享圖片

使用BRAVH的 Adapter:

首先需要繼承BaseQuickAdapter,然後BaseQuickAdapter<T, BaseViewHolder> 中第一個泛型T是數據實體類型,第二個BaseViewHolder是ViewHolder,其目的是為了支持擴展ViewHolder。

技術分享圖片

可以通過viewHolder.getView(viewId)獲取該控件。 通過viewHolder.getLayoutPosition() 獲取當前item的position。(為什麽有數據不顯示?檢查一下的RecyclerView是否設置了LayoutManager。)

代碼量是3:1的比例!

和原始的adapter相對,減少了70%的代碼量。

實現思路:

找到重復部分代碼,抽取到基類,非重復部分用抽象方法代替,具體讓子類實現。具體代碼BaseQuickAdapter如下:(onCreateViewHolder方法和普通adapter一樣,對onBindViewHolder方法進行了提取,使用抽象方法convert(抽象方法)代替。)

技術分享圖片

接下來再看看BaseViewHolder怎麽寫的:( 把ViewHolder進行了封裝,利用了 SparseArray,加快了查找已創建好控件的速度,沒有創建再使用findviewbyId再存入SparseArray)

技術分享圖片


技術分享圖片

三、強大的功能

1. 復雜布局實現(多布局)

在實際應用中經常會遇到各種樣式的列表、宮格和列表同時存在、分類列表等情況。

1.1 多布局

在雲閱讀中的使用:“評論頁面”( 優點: 代碼量少,節省時間,簡潔,清晰,易維護)

技術分享圖片

普通多布局寫法:

getItemViewType方法,根據位置獲取當前item的類型,在onCreateViewHolder 和 onBindViewHolder中匹配類型進行操作。

技術分享圖片

BRAVH是怎麽實現?

1、實體類(UserComment)實現MultiItemEntity接口,在設置數據的時候,給每一個數據設置itemType。

技術分享圖片

評論的實體類:

技術分享圖片

2、adapter繼承BaseMultiItemQuickAdapter類,在構造方法中調用addItemType()方法加入定義的 itemType 和對應布局, 在 Activity 中實例化即可。

技術分享圖片

和原始的adapter相對,減少70%的代碼量,更加清晰易於維護。

原理分析:

技術分享圖片

技術分享圖片



網易雲免費體驗館,0成本體驗20+款雲產品!

更多網易研發、產品、運營經驗分享請訪問網易雲社區。


相關文章:
【推薦】 SpringBoot入門(一)——開箱即用

BRVAH(讓RecyclerView變得更高效)(1)