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

本文来自网易云社区

作者:吴思博


1.2 宫格和列表的混排样式

关于 Grid 和List 的混排样式,Grid 样式是一行有多个,而 List样式是一行只有一个。 我们可以把 List 样式看成是Grid 样式,它就相当于把一个 Grid 的 item 拉长了的样子。

BRVAH(让RecyclerView变得更高效) (2)_第1张图片

列表与网格混排的布局效果,我们可以创建 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变得更高效) (2)_第2张图片

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

 

1.3 Recyclerview嵌套 Recyclerview 的复杂布局

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

 

BRVAH(让RecyclerView变得更高效) (2)_第3张图片BRVAH(让RecyclerView变得更高效) (2)_第4张图片

    

蜗牛的领读ReadTrendFragment                                              Lofter发现的音乐Fragment

 

这种界面布局样式,最外面一个RecyclerView,它里面嵌套一个 RecyclerView。继承BaseMultiItemQuickAdapter 在重写的 convert() 方法中实例化子 Recyclerview。

BRVAH(让RecyclerView变得更高效) (2)_第5张图片

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

Android:descendantFocusability="blocksDescendants" 即可。

 

2. 实现了点击监听事件

  BRVAH(让RecyclerView变得更高效) (2)_第6张图片

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

 

2.1对于 item 的监听事件处理

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

BRVAH(让RecyclerView变得更高效) (2)_第7张图片

item 长按监听事件

BRVAH(让RecyclerView变得更高效) (2)_第8张图片


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

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

BRVAH(让RecyclerView变得更高效) (2)_第9张图片

BRVAH(让RecyclerView变得更高效) (2)_第10张图片

2.3 也可以通过viewHolder.getView(viewId)获取该控件,再设置监听。

BRVAH(让RecyclerView变得更高效) (2)_第11张图片

 

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

更多网易研发、产品、运营经验分享请访问网易云社区。

相关文章:
【推荐】 分布式存储系统可靠性系列一:如何估算

你可能感兴趣的:(BRVAH(让RecyclerView变得更高效) (2))