浅谈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 这些第三方控件来解决



  • 2019-12-19 16:44:01

    根据条件配置多个npm仓库

    scope 是一种很好的包管理方式。统一的“命名空间”,清晰、好辨识;在 registry 中使用统一的 organization 管理,不必担心命名冲突和冒用等。 在实际使用中,一个常见的场景是公司的私有仓库。使用统一的 scope 定义在私有仓库中定义私有包,绝对是一个非常好的方式。 指定 scope 从指定仓库安装

  • 2019-12-20 13:24:58

    瓦片地图生成使用以及原理

    我们都知道地球是圆的,电脑显示器是平的,要想让位于球面的形状显示在平面的显示器上就必然需要一个转换过程,这个过程就叫做投影(Projection)。在地球上我们通过经纬度来描述某个位置,而经过投影之后的地图也有自己的坐标系统,本篇文章就来详细介绍在百度地图API中涉及的各种坐标体系。

  • 2019-12-20 13:27:16

    腾讯地图谷歌和高德地图等自定义地图区别

    腾讯、百度、Google的地图投影均采用Web Mercator 投影坐标系;腾讯与Google的地图瓦片分辨率及切片范围是完全相同的,仅仅是命名规则稍有不同,这就使得同一位置和缩放级别的地图瓦片是完全可以重叠的;而百度地图每个缩放级别分辨率与前两者均不相同,而且地图瓦片的坐标原点做了一定的偏移,导致百度地图与前两者的瓦片是无法重叠的,这是因为百度在GCJ-02的基础上又进行了加密处理,形成了百度独有的BD-09坐标系。

  • 2019-12-22 08:06:48

    如何快速撤销上一次的commit

    在平时工作中使用git难免会提交一些错误的文件到git库里,这时候,撤销吧,怕把正确的文件删除了,不撤销重新改又很麻烦,下面,我就从提交的三个阶段,来讲解如何撤销错误的操作。