RecyclerView多item复杂列表嵌套的分析及嵌套带来的滑动卡顿问题解决方案

recyclerView的使用场景比较复杂,例如腾讯动漫的首页这种类型,而且腾讯动漫这种列表也有滑动卡顿感

4002920-ce44d91da144d1fc.png

我们来分析一下这个列表,最外层我们可以通过一个recyclerView来实现,顶部的轮播图可以使用一个头布局

关键就是接下来的item了,我圈了几个黑色圆圈,我们可以看出,每个item是不一样,所以就是要使用多item布局

但是我们再仔细看一看每一个item,例如这个,我们能用一个xml布局写6个imageView吗?

4002920-50bb13fc4dfba5db.png
QQ截图20190531131411.png

实际上,也行,但是太麻烦了,如果这样写,后面的赋值会多到让你怀疑人生,所以这个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
            }

猜你喜欢

转载自blog.csdn.net/weixin_33766805/article/details/90998872