错误日志:
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://www.jianshu.com/p/2eca433869e9
recyclerView 使用填坑记:
当recyclerView + NestScrollView 同时使用的时候,
recyclerView加载数据时会分别调用onCreateViewHolder 和 onBindViewHolder两个方法
相当于对列表的item布局不停的进行加载,如果recyclerView显示数据过多,界面就会卡,非常卡
recyclerView 自带滚动,如无特殊需求请让它远离NestScrollView!
日常划水群: 88627109
欢迎您的到来