recyclerView 遇到IndexOutOfBoundsException 及解决

简介:      做项目时用到了recyclerView,至于recyclerView是啥应该不用多解释了,具体用法也不介绍了,不懂的同学自行学习一下,网上很多大神已经介绍的很清楚了,我就不啰嗦了0.

     做项目时用到了recyclerView,至于recyclerView是啥应该不用多解释了,具体用法也不介绍了,不懂的同学自行学习一下,网上很多大神已经介绍的很清楚了,我就不啰嗦了0.0

     在使用recyclerView时遇到了一个问题,上下滑动时有时候应用会崩溃,看错误日志也只是有一个recyclerView的IndexOutOfBoundsException,全是Android底层的错误,和我们写的代码没有一点关系,关键是这个错误知识偶尔出现,刚开始不知道什么什么操作就崩了,后来发现了,只要在刷新的时候滑动就会蹦,既然知道什么情况崩了就有处下手了。

    去网上搜错误原因,才知道是Android底层的一个bug,原因是在刷新数据的时候数据的list的size变为0,这时再滑动就会数组越界了,然后就崩了。我用的是Android在带的下拉刷新控件SwipeRefreshLayout,

    既然是list为空后滑动导致的崩溃,那直接在刷新数据时禁止recyclerView滑动不就行了。

    顺着这个思路,在SwipeRefreshLayout的下拉事件setOnRefreshListener中禁止recyclerView滑动,然后在网络请求结束后恢复滑动。

refreshLayout.setOnRefreshListener(newSwipeRefreshLayout.OnRefreshListener() {//下拉刷新事件

@Override

   public voidonRefresh() {

            list_recyclerview.clear();//recycleyView 的数据list

           //重写recyclerView的onTouch事件

            mRecyclerView.setOnTouchListener(newView.OnTouchListener() {

           @Override

           public booleanonTouch(View v,MotionEvent event) {

                return true;//返回true

         }

});

         getDataFromHttp();

        }

});


privateHandlerhandler=newHandler() {

     @Override

      public voidhandleMessage(Message msg) {

      refreshLayout.setRefreshing(false);//隐藏进度条

      list_recyclerview.clear();//清空list

      JSONObject json = (JSONObject) msg.obj;

      list_recyclerview.addAll(news_content_jsonUtil.getList(json));//解析json数据并更新list

      adapter.notifyDataSetChanged();//更新到adapter


mRecyclerView.setOnTouchListener(newView.OnTouchListener() {//恢复recyclerView的滑动事件

     @Override

     public booleanonTouch(View v,MotionEvent event) {

            return false;

          }

    });

}

       这样就可以解决recyclerView更新数据时滑动崩溃的问题了,网上也有很多大神给出了别的解决办法,我试过一种没起作用,可能是我用的不对,我用这种解决了0.0    

    我也是小菜鸟,问题产生的底层原因我也没有分析源码,这种问题还是留给Google来解决吧。

目录
相关文章
|
存储 Java 大数据
0036Java程序设计-基于Java的敬老院管理系统的设计和实现毕业设计论文1
0036Java程序设计-基于Java的敬老院管理系统的设计和实现毕业设计论文
349 0
|
存储 弹性计算 数据处理
阿里云对象存储OSS怎么收费?包年包月和按量付费价格表
阿里云对象存储OSS提供灵活的计费方案,包括存储费、流量费和请求费等。用户可选择按量付费或包年包月模式。标准型存储按量付费为0.09元/GB/月,包年包月则有多种套餐选择,如9元/年40GB和99元/年100GB。OSS流量费仅针对公网出方向,并区分闲忙时段。此外还提供流量包服务。更多详情及特殊需求费用(如数据处理、传输加速等)
|
应用服务中间件 nginx Windows
windows下快速安装nginx 并配置开机自启动
windows下快速安装nginx 并配置开机自启动
4412 0
windows下快速安装nginx 并配置开机自启动
|
存储 安全 程序员
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
1833 0
|
供应链 安全 算法
区块链密码学:基础知识、应用与未来发展
区块链密码学:基础知识、应用与未来发展
1083 0
|
缓存 JSON Rust
微前端(无界)
微前端是借鉴了微服务的理念,将一个庞大的应用拆分成多个独立灵活的小型应用,每个应用都可以独立开发,独立运行,独立部署,还可以随意组合,这样就降低了耦合度,从而更加灵活。
2701 0
微前端(无界)
|
存储 Unix Linux
[Linux打怪升级之路]-管道
[Linux打怪升级之路]-管道
|
机器学习/深度学习 算法
一份数据科学“必备”的数学基础清单
一份数据科学必备的数学知识清单,给出了相应的学习资源,方便秋招者查漏补缺。
5132 0
|
1天前
|
云安全 安全 网络安全