欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决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
        }
    }