浅谈Recycleview嵌套卡顿 以及你所不知道的解决方案

2019-05-21 12:34:38

参考地址 浅谈Recycleview嵌套卡顿 以及你所不知道的解决方案

由于项目需要,需要做到recycleview 这里先不讲如何用其他控件代替这种嵌套的方式


先假定你已经嵌套了 老板还不给时间给你给布局方式 那么这个时候你的这个嵌套列表 必定是卡顿的


只要超过一屏,展示效果会有卡顿现象,原因就是由于两个RecyclerView的存在,使得滑动的view滑出当前屏幕的释放存在冲突


每次都执行inflate方法


下面总结网上的几个神方法


1.最常见 的  recyclerView.setNestedScrollingEnabled(false);  这个方法有可能有效 是可以加的


2.重写recycleview


 

public class MyRecycleView extends RecyclerView {

 

    public MyRecycleView(Context context) {

        super(context);

    }

 

    public MyRecycleView(Context context, @Nullable AttributeSet attrs) {

        super(context, attrs);

    }

 

    public MyRecycleView(Context context, @Nullable AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

    }

 

    @Override

    public boolean onInterceptTouchEvent(MotionEvent e) {

        //返回false,则把事件交给子控件的onInterceptTouchEvent()处理

        return false;

    }

 

    @Override

    public boolean onTouchEvent(MotionEvent e) {

        //返回true,则后续事件可以继续传递给该View的onTouchEvent()处理

        return true;

    }

}

这个方法确实有效 但是有坑 比如你的外层recycleview无法滑动等等


3.这个方法是博主 “泡在网上的日子”写的 关于viewpool的使用解决滑动卡顿 的问题,但是我没有尝试 ,所以也不知道怎么样 ,希望有试过的朋友可以留言指教一二  博客地址 :http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0914/8514.html


4.最后的最后 给一些 神功秘籍 这些简单粗暴的方法 是可以帮你解决卡顿问题的


a.调用 预加载方法 setInitialPrefetchItemCount(int) 来优化嵌套时预加载性能,例如横向RecycleView上有3.5个item需要显示,可以调用LinearLayoutManager.setInitialPrefetchItemCount(4),默认的数值是2。


b.设置recycleview的子项缓存 


rv.setItemViewCacheSize(200);


c.继续结合


rv.setHasFixedSize(true);        rv.setNestedScrollingEnabled(false);

完美解决嵌套卡顿


总结:虽然解决了卡顿 但是这种做法目前是不支持的 谷歌本身就不推荐recycleview 嵌套 类似这个需求 我们应该尽可能找类似 ExpandableListView 这些第三方控件来解决



  • 2017-05-12 16:33:24

    说说JSON和JSONP,也许你会豁然开朗

      JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议。我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式。看到没?一个是描述信息的格式,一个是信息传递双方约定的方法。

  • 2017-05-25 23:18:23

    webpack图片的路径与打包

    刚开始用webpack的同学很容易掉进图片打包这个坑里,比如打包出来的图片地址不对或者有的图片并不能打包进我们的目标文件夹里(bundle)。下面我们就来分析下在webpack项目中图片的应用场景。

  • 2017-06-17 18:33:17

    NodeJs使用asyncAwait两法

    async/await使用同步的方式来书写异步代码,将异步调用的难度降低到接近于0,未来必将大放异彩。然而在当下,由于标准化的缓存步伐,async/await尚在ES7的草案中。为了尝先,特试用了下面两种方式:

  • 2017-06-18 02:26:17

    Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F

    我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8编码规范)。正常的汉字一般不会超过3个字节,为什么为出现4个字节呢?实际上是它对应的是智能手机输入法中的表情。那为什么会报错呢?

  • 2017-06-18 02:34:22

    谈mysql中utf8和utf8mb4区别

    MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

  • 2017-07-05 09:48:51

    CSS 元素垂直居中的 6种方法

    利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可。本文收集了六种利用css进行元素的垂直居中的方法,每一种适用于不同的情况,在实际的使用过程中选择某一种方法即可。