如题
本文章主要从代码上简单分析:
- getAdapterPosition返回NO_POSITION的原因
场景之一(目前只碰到一个-_-):
点击RecyclerView中某一项后,
在执行android.view.View.performClick中,
通过ViewHolder.getAdapterPosition得到-1,即NO_POSITION,
最后ArrayList的get(position)传入了-1崩掉了
上面的场景是比较难出现:由于时间问题,先简单针对性的说一下原因:
调用了RecyclerView的Adapter的notifyDatasetChanged方法后刚好马上执行了View的performClick。
notifyDatasetChanged将所有的ViewHolder设置了flag
执行View的performClick后调用ViewHolder的getAdapterPostion
有上面看到,该flag顾名思义,然后返回了NO_POSITION了。
关于什么时候会恢复flag,目前还木有研究,有兴趣的可以自行去参考资料,或者,read the fucking source code(-_-)
小结一下:
getAdapterPosition有可能返回NO_POSITION(比如调用notifyDatasetChanged后),外面获取该position时需要注意!
以后有空会继续更新