首页 > 其他分享 >Android RecyclerView异步更新数据导致的崩溃问题

Android RecyclerView异步更新数据导致的崩溃问题

时间:2023-03-12 11:06:25浏览次数:40  
标签:异步 widget java support LinearLayoutManager Android RecyclerView android


          Android RecyclerView异步更新数据导致的崩溃问题

 

之前写极光即时通讯UI的时候,发现的问题,今天突发奇想,来分享给大家.

问题症状:

如果绑定的集合List中的数据和RecycerView的数据不一致的时候 RecycerView就会崩溃

 

报错信息:

1 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 157(offset:157).state:588
2 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3300)
3 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3258)
4 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1803)
5 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1302)
6 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1265)
7 at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1093)
8 at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:956)
9 at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:2715)
10 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
11 at android.view.Choreographer.doCallbacks(Choreographer.java:555)
12 at android.view.Choreographer.doFrame(Choreographer.java:524)
13 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
14 at android.os.Handler.handleCallback(Handler.java:615)
15 at android.os.Handler.dispatchMessage(Handler.java:92)
16 at android.os.Looper.loop(Looper.java:137)
17 at android.app.ActivityThread.main(ActivityThread.java:4921)
18 at java.lang.reflect.Method.invokeNative(Native Method)
19 at java.lang.reflect.Method.invoke(Method.java:511)
20 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
21 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
22 at dalvik.system.NativeStart.main(Native Method)

解决方案:

mRecycler.setLayoutManager(new WrapContentLinearLayoutManager(this));

public class WrapContentLinearLayoutManager extends LinearLayoutManager {


public WrapContentLinearLayoutManager(Context context) {
super(context);
}

public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}

public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}

@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
try {
super.onLayoutChildren(recycler, state);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
}

}


标签:异步,widget,java,support,LinearLayoutManager,Android,RecyclerView,android
From: https://blog.51cto.com/u_13520184/6115602

相关文章

  • Android WebView重定向链接无法显示的问题
    最近在网上看到一些这样的帖子,但是大多都无法解决重定向重排版链接的加载问题我这边给出一个最终解决方案,绝对比任何复杂的方式可靠何为重定向链接?当用户或​​搜索引擎......
  • Android 自定义EditText (限制表情输入&超出长度提示)
    有需要的直接拿去用,有什么问题请评论,第一时间回复/***CreatedbyXinghai.Zhaoon18/05/23.*//**作者:赵星海*时间:18/05/2415:56*用途:用于防止表情输出和最大......
  • Android 集合数据在Sharedpreferences中的增删改查
    Android集合数据在Sharedpreferences中的增删改查Sharedpreferences作为一个轻量化的Android本地存储方式相信很多人都为其不能存集合而烦恼所以呢,我封了两个简易的方法希......
  • Android 时间戳 转换成 多少天前、多少小时前、多少分钟前
     最新深海发现一个非常好用的方法,分享给大家DateUtils.getRelativeTimeSpanString("时间戳").toString();返回结果为: "1天前"或者 "1小时前"或者 "1分钟前"1.不用任......
  • Android Js交互,调起Js中的方法
    //调用PC端方法例如方法名为:editBtn()if(Build.VERSION.SDK_INT<18){mWebView.loadUrl("javascript:editBtn()");......
  • Android Base64转BitMap
                  AndroidBase64转BitMap 使用场景:微信付款码,图片验证码.等...为了节省服务器存储,将图片以Base64的形式存储.方法如下:导包......
  • Android 手机号正则判断
    //手机号判断true为通过验证publicstaticbooleanisChinaPhoneLegal(Stringstr)throwsPatternSyntaxException{if(str==null){return......
  • Android 通过重写EditText,实现最简单的@好友
    4月份的代码,有人要用的话直接粘贴过去用就可以/**作者:赵星海*时间:18/04/2310:28*用途:@好友的实现*/publicclassMsgEditTextextendsAppCompatEditText{pub......
  • Android与H5(JavaScript)之间的简单交互
    Android响应Js的动作 假设网页端要调用Android原生的方法:showToast();1.做一个盆子接收消息(创建一个工具类,写一个方法(*带注解))publicclassJavaScriptMethod{......
  • Android资源文件特殊字符转义编码
    举个栗子啊,我今天用了@这个符号写了好多次都没写成功,原因出在哪里:"&#64;好友"这样就报红;"&#64;好友"这样就没事了 .所以呢以下的 某些编码不允许放在开头,到前......