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

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

blank 如何 manager 焦點 sde -c 原來 dap amp

本文來自網易雲社區

作者:吳思博


1.2 宮格和列表的混排樣式

關於 Grid 和List 的混排樣式,Grid 樣式是一行有多個,而 List樣式是一行只有一個。 我們可以把 List 樣式看成是Grid 樣式,它就相當於把一個 Grid 的 item 拉長了的樣子。

技術分享圖片

列表與網格混排的布局效果,我們可以創建 adapter 繼承 BaseMultiItemQuickAdapter添加對應 item 類型的布局文件,也可以在 Activity中創建GridLayoutManager對象,設置spanSize屬性,通過 Adapter 的setSpanSizeLookup()方法設置每種item類型對應的spanSize。設置Recyclerview的addItemDecoration()方法設置添加分割線或設置 item 間距。

在創建GridLayoutManager對象時, spanSize的參數需要設置,它的作用就是使原來一個item占滿一行變為可以最多三個 item 占滿一行。

而設置setSpanSizeLookup()方法返回的是對應每種item類型返回具體的橫跨大小。比如代碼中TYPE_GRID類型的item在設置的spanSize是 1,而 GridLayoutManager 設置的 spanSize 是 3,那麽該類型的item 就會以 3 個 item 占滿一行,相當於每個 item 占一行的 1/3。

代碼片段:

技術分享圖片

在我們使用addItemDecoration()添加分割線的方法中對這種混排的列表設置item間距的時候,在 getItemOffsets()方法裏,通過GridLayoutManager.LayoutParams獲取spanSize 來確定 item 類型設置對應間距, 其中spanIndex表示當前行item對應的下標位置,從左到右依次從 0 開始。

1.3 Recyclerview嵌套 Recyclerview 的復雜布局

我們“文學漫畫”產品中,那些地方用到這種布局?例如蝸牛的領讀ReadTrendFragment、 Lofter發現音樂Fragment、 雲閱讀書店BookStoreFragment。

技術分享圖片技術分享圖片

蝸牛的領讀ReadTrendFragment Lofter發現的音樂Fragment

這種界面布局樣式,最外面一個RecyclerView,它裏面嵌套一個 RecyclerView。繼承BaseMultiItemQuickAdapter 在重寫的 convert() 方法中實例化子 Recyclerview。

技術分享圖片

需要註意的是Recyclerview 嵌套 Recyclerview 會出現子 Recyclerview 搶焦點的問題, 導致界面頂部部分控件被擠出, 只需在最外面的Recyclerview 的包裹容器中設置屬性

Android:descendantFocusability="blocksDescendants" 即可。

2. 實現了點擊監聽事件

技術分享圖片

BRVAH為我們提供好了全面的 item 和 item 子 View 的監聽事件,我們只需在繼承它提供的 Adapter 的基礎上,通過adapter 來調用對應的監聽。 設置監聽子 View 前,我們需要在 adapter 中對應的 item 的子 View 註冊對應的監聽事件。

2.1對於 item 的監聽事件處理

直接在 Activity 中添加 item 點擊事件,和listview一樣。

技術分享圖片

item 長按監聽事件

技術分享圖片


2.2對 item 中子 View 的監聽事件處理

首先需要在adapter 中,註冊子 View 的監聽事件。

技術分享圖片

技術分享圖片

2.3 也可以通過viewHolder.getView(viewId)獲取該控件,再設置監聽。

技術分享圖片

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

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

相關文章:
【推薦】 知物由學 | 你真的了解網絡安全嗎?
【推薦】 “代碼變更覆蓋率”在後端測試中的實踐
【推薦】 實戰案例:如何快速打造1000萬+播放量的抖音網紅?

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