CymChad / BaseRecyclerViewAdapterHelper

BRVAH:Powerful and flexible RecyclerAdapter
http://www.recyclerview.org/
MIT License
24.36k stars 5.17k forks source link

当adapter已经有数据以后再使用SetDiffNewData(null)会报错 #3298

Open yudanhezhongweijie opened 4 years ago

yudanhezhongweijie commented 4 years ago

用的是3.0.4 先给adapter设置一遍数据setDiffNewData(list)然后再setDiffNewData(null)会出以下bug

Fatal Exception: java.lang.IndexOutOfBoundsException Inconsistency detected. Invalid view holder adapter positionBaseViewHolder{f92e379 position=0 id=-1, oldPos=3, pLpos:3 scrap [attachedScrap] tmpDetached no parent} androidx.recyclerview.widget.RecyclerView{feb8aab VFE..V... ........ 0,0-1080,2010 #7f0a0239 app:id/recyclerView},

规避方法就是直接用setList(null)

zhujunhua2012 commented 2 years ago

我这边也出现了这个问题(3.0.4), Adapter.setEmptyView(R.layout.empty_view)(使用的layout id)的调用发生在RecyclerView.setAdapter(adapter) 之前,在老版本是可以的,但是3.0.4中是不行的(3.0.4中setEmptyView(layoutResId: Int)mRecyclerView进行了判空操作)。 ==>先RecyclerView.setAdapter(adapter) ,再Adapter.setEmptyView(R.layout.empty_view),就不会出现这个问题了。(具体原因还没研究。。)

ps: 楼主的setList(null)也可以规避,即使Adapter.setEmptyView(R.layout.empty_view)顺序在前。