BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)

本文来自网易云社区
作者:吴思博


1.2 宫格和列表的混排样式

关于 Grid 和List 的混排样式,Grid 样式是一行有多个,而 List样式是一行只有一个。 我们可以把 List 样式看成是Grid 样式,它就相当于把一个 Grid 的 item 拉长了的样子。
BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片


列表与网格混排的布局效果,我们可以创建 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。



代码片段:
BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片


在我们使用addItemDecoration()添加分割线的方法中对这种混排的列表设置item间距的时候,在 getItemOffsets()方法里,通过GridLayoutManager.LayoutParams获取spanSize 来确定 item 类型设置对应间距, 其中spanIndex表示当前行item对应的下标位置,从左到右依次从 0 开始。



1.3 Recyclerview嵌套 Recyclerview 的复杂布局

我们“文学漫画”产品中,那些地方用到这种布局?例如蜗牛的领读ReadTrendFragment、 Lofter发现音乐Fragment、 云阅读书店BookStoreFragment。



BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片
BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片



蜗牛的领读ReadTrendFragmentLofter发现的音乐Fragment



这种界面布局样式,最外面一个RecyclerView,它里面嵌套一个 RecyclerView。继承BaseMultiItemQuickAdapter 在重写的 convert() 方法中实例化子 Recyclerview。
BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片


需要注意的是Recyclerview 嵌套 Recyclerview 会出现子 Recyclerview 抢焦点的问题, 导致界面顶部部分控件被挤出, 只需在最外面的Recyclerview 的包裹容器中设置属性

Android:descendantFocusability="blocksDescendants" 即可。



2. 实现了点击监听事件

BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片


BRVAH为我们提供好了全面的 item 和 item 子 View 的监听事件,我们只需在继承它提供的 Adapter 的基础上,通过adapter 来调用对应的监听。 设置监听子 View 前,我们需要在 adapter 中对应的 item 的子 View 注册对应的监听事件。



2.1对于 item 的监听事件处理

直接在 Activity 中添加 item 点击事件,和listview一样。

BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片


item 长按监听事件

BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片




2.2对 item 中子 View 的监听事件处理

首先需要在adapter 中,注册子 View 的监听事件。

BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片

BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片


2.3 也可以通过viewHolder.getView(viewId)获取该控件,再设置监听。
BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)
文章图片



网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区。
【BRVAH(让RecyclerView变得更高效)|BRVAH(让RecyclerView变得更高效) (2)】相关文章:
【推荐】 巧用Scrum与Kanban
【推荐】 AndroidTV开发(2)

    推荐阅读