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来解决吧。

目录
相关文章
|
11月前
|
搜索推荐 Java 开发工具
RecyclerView的那点事儿
RecyclerView的那点事儿
63 0
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionVie
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionVie
RecyclerView学习-RecyclerView#Adapter#notifyDataSetChanged是如何更新数据的?
RecyclerView学习-RecyclerView#Adapter#notifyDataSetChanged是如何更新数据的?
|
前端开发 Android开发
RecyclerView实现吸底效果—ItemDecoration
RecyclerView实现吸底效果—ItemDecoration
|
存储 缓存 开发工具
RecyclerView#Adapter#notifyDataSetChanged方法后,为何还会新建ViewHolder?
RecyclerView#Adapter#notifyDataSetChanged方法后,为何还会新建ViewHolder?
RecyclerView.notifyItemRemoved导致的数组下标越界问题
我们一般在RecyclerView列表中移除某条Item时会调用 notifyItemRemoved 方法,其还附带了相应的移除特效。
157 0
实现RecyclerView中remove飞出的效果
我们经常会遇到在一个list中删除一条数据,这时候一般会有一个飞出的动画效果 在RecyclerView中可以通过setItemAnimator函数设置一个ItemAnimator,实现item的add、remove、change等动作的动效。下面我们就通过ItemAnimator来实现上面的效果。
149 0
|
存储 缓存 Java
RecyclerView问题汇总
目录介绍 25.0.0.0 请说一下RecyclerView?adapter的作用是什么,几个方法是做什么用的?如何理解adapter订阅者模式? 25.0.0.1 ViewHolder的作用是什么?如何理解ViewHolder的复用?什么时候停止调用onCreateViewHolder? 25.
2949 0