解决IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter
程序员文章站
2022-05-04 20:02:24
...
解决IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter
最近项目已个要求,recyclerview显示数据不闪烁,也就是即时更新,一般后台数据没什么变化的话要实现不闪烁显示,所以需要给recyclerViewAdapter
适配器延时后再notify更新据,一般2-3秒,但是这时如果用户在点击请求数据后立马刷新recyclerview就会报上面的错误,应该是列表数据在更改的情况下没有即时通知适配器的原因,其实一般可以通过加个对话框友好提示,但是需求方没有这个需求除了这种外我发现还有一种比较可行的,就是在数据刚拿到时给拦截recyclerview的触摸事件,然后延时更新后在添加触摸事件,recyclerview?.setOnTouchListener(onTouchEnabled)
,这里为了方便调用,可以写成一个匿名内部类。
//返回false 不拦截子View触摸,true拦截消费
private var onTouchEnabled = object : View.OnTouchListener{
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
return false
}
}
private var onTouchDisabled = object : View.OnTouchListener{
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
return true
}
}