美文网首页
java.lang.IndexOutOfBoundsExcept

java.lang.IndexOutOfBoundsExcept

作者: 爱码士平头哥 | 来源:发表于2021-09-02 15:10 被阅读0次

    先上崩溃日志。
    java.lang.IndexOutOfBoundsException

    Inconsistency detected. Invalid view holder adapter positionViewHolder{762658d position=104 id=-1, oldPos=-1, pLpos:-1 no parent} com.hpplay.picturelib.widgets.RecyclerPreloadView{7e1b40a VFED..... ......I. 0,0-1080,1795 #7f0b046e app:id/picture_recycler}, adapter:com.hpplay.happycast.externalscreen.adapter.PictureImageGridAdapter@9b0e47b, layout:com.hpplay.view.utils.MyGridLayoutManager@810f298, context:com.hpplay.happycast.externalscreen.photo.PictureExternalScreenSelectorActivity@8c3297e

    莫名其妙的崩溃,上百度,度出来的全是垃圾,什么自定义LinearLayoutManager,对onLayoutChildren try catch啦。大爷的,误导人。

    @Override

    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {

    try {

    super.onLayoutChildren(recycler, state);

    }catch (IndexOutOfBoundsException e) {

    LePlayLog.w(TAG, e);

    }}

    首先,这个问题的根本原因是RecyclerView在滑动的过程是不能更新数据源的。具体为什么,我也不清楚,有人说是android系统bug,我们就认为它是系统bug吧,反正在RecyclerView在滚动时无论是notifyDataSetChanged还是notifyItemRangeChanged都是会崩溃的。

    找了各种办法,验证都是崩溃。。。

    最后,上大招:

    不是滑动更新就崩溃吗?我不让它滑动不行了?

    在滑动时需要更新数据源的前面写上这么一句:

    if (mRecyclerView.getScrollState() == RecyclerView.SCROLL_STATE_SETTLING) {

    mRecyclerView.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_CANCEL,0,0,0));

    }

    RecyclerView滑动继续,更新数据也没有崩溃。完美修复问题!!!

    相关文章

      网友评论

          本文标题:java.lang.IndexOutOfBoundsExcept

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