UncaughtHandler: TinkerUncaughtHandler catch exception:java.lang.IllegalStateException: Two differen

      

 

错误日志:

2020-03-02 17:58:14.070 26918-26918/com.fanfareknowledge.pickupkinsfolk E/Tinker.UncaughtHandler: TinkerUncaughtHandler catch exception:java.lang.IllegalStateException: Two different ViewHolders have the same stable ID. Stable IDs in your adapter MUST BE unique and SHOULD NOT change.
     ViewHolder 1:ViewHolder{4e0932e position=1 id=807146259, oldPos=-1, pLpos:-1} 
     View Holder 2:ViewHolder{f9f80ad position=0 id=807146259, oldPos=-1, pLpos:-1} androidx.recyclerview.widget.RecyclerView{ef0593a VFED..... ......ID 0,0-1080,1998 #7f0900ad app:id/chat_fFList_rV_content}, adapter:com.kjq.common.base.mvvm.adapter.BindingRecyclerViewAdapter@959d9d5, layout:androidx.recyclerview.widget.LinearLayoutManager@b5ed5ea, context:com.kjq.common.base.mvvm.base.BaseGeneralShowActivity@cb34997
        at androidx.recyclerview.widget.RecyclerView.handleMissingPreInfoForChangeError(RecyclerView.java:4124)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:4048)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3718)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4260)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1961)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at com.kjq.common.ui.designs.refreshLayout.SmartRefreshLayout.onLayout(SmartRefreshLayout.java:690)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:757)
        at android.view.View.layout(View.java:20699)
        at android.view.ViewGroup.layout(ViewGroup.java:6198)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2844)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2361)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1506)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7351)

重要提示:

at com.kjq.common.ui.designs.refreshLayout.SmartRefreshLayout.onLayout(SmartRefreshLayout.java:690)

 

解决思路:

首先个人当时并不觉得需要smartRefreshLayout,

但是删除smartRefreshLayout布局以后仍然有其他报错,继续…

确定错误代码-->

binding.chatFFListRVContent.getAdapter().notifyItemRangeRemoved(integerIntegerPair.first, integerIntegerPair.second);

recyclerView的刷新数据方法一共四种:

notifyItemRangeRemoved();

notifyItemRangeInserted();

notifyItemRangeChanged();

notifyDataSetChanged();

其中notifyDataSetChanged()方法是常用的,简单有效将数据同步到列表,刷新动画是闪屏;

其他方法也是可以使得recyclerView在添加、删除数据以后同步数据的方法,但是刷新动画是局部刷新。

产生报错的原因是没有及时的同步数据导致。

 

最初错误代码指引我找viewHolder,提示viewHolder不对,这里找到一位挺久的解决方法但没试过

https://stackoverflow.com/questions/39187827/recyclerview-viewholder-extending-from-same-class-has-different-view-type-two-d

 

参考:https://www.jianshu.com/p/2eca433869e9

 

recyclerView 使用填坑记:

当recyclerView + NestScrollView 同时使用的时候,

recyclerView加载数据时会分别调用onCreateViewHolder 和 onBindViewHolder两个方法

相当于对列表的item布局不停的进行加载,如果recyclerView显示数据过多,界面就会卡,非常卡

recyclerView 自带滚动,如无特殊需求请让它远离NestScrollView!

 

日常划水群: 88627109

欢迎您的到来

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值