RecyclerView多item复杂列表嵌套的分析及嵌套带来的
2019-05-31 本文已影响1人
唐_夏影
recyclerView的使用场景比较复杂,例如腾讯动漫的首页这种类型,而且腾讯动漫这种列表也有滑动卡顿感

我们来分析一下这个列表,最外层我们可以通过一个recyclerView来实现,顶部的轮播图可以使用一个头布局
关键就是接下来的item了,我圈了几个黑色圆圈,我们可以看出,每个item是不一样,所以就是要使用多item布局
但是我们再仔细看一看每一个item,例如这个,我们能用一个xml布局写6个imageView吗?

实际上,也行,但是太麻烦了,如果这样写,后面的赋值会多到让你怀疑人生,所以这个item的xml,我们又是需要用到recyclerView来写
而且这样的xml,其实全部都是需要用recyclView来写的,这意味着,我们最终是使用多item的recyclerView,再嵌套多item的recyclerView来实现的
接着就回到最初的问题了,这样的嵌套,加上recyclerView布局的复用,会让整个界面滑动起来有卡顿感,因为滑动过程中onBindViewHolder是不断被调用的
解决方案:
在onBindViewHolder加一个判断,在第一次进入的时候给外层item的recyclerView进行tag赋值,在第二次进来时判断是否已经有了该tag,如果已经有了就直接返回,不进行下面的操作了
//判断获取到的模块类别,showType
val recyclerView = helper.getView<RecyclerView>(R.id.mRvItem)
val tag = recyclerView.tag
if ((tag is Int) && tag == helper.layoutPosition) {
return
} else {
recyclerView.tag = helper.layoutPosition
}