recyclerView 遇到IndexOutOfBoundsE

作者: QxQx | 来源:发表于2016-12-28 19:29 被阅读799次

         做项目时用到了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来解决吧。

    相关文章

      网友评论

        本文标题:recyclerView 遇到IndexOutOfBoundsE

        本文链接:https://www.haomeiwen.com/subject/wvayvttx.html