我目前正在学习android,第一次添加滑动以删除RecyclerView的功能。我遇到了有关刷卡功能的以下理论,但是我无法理解下面讨论的关于getAdapterPosition将返回RecyclerView.NO_POSITION的原因。
- 当适配器内容更改(并且您致电notify ***)时,RecyclerView会请求新的布局。
- 从那时起,直到布局系统决定计算新的布局(<16 ms),该布局 位置和适配器位置可能不匹配,因为布局尚未反映适配器的更改。
- 如果您正在调用notifyDataSetChanged,它将使所有内容无效,RecyclerView不知道 在计算下一个布局之前,ViewHolder的适配器位置。
- 在这种情况下,getAdapterPosition将返回RecyclerView.NO_POSITION(-1)
- 如果已调用notifyItemInserted(0),则ViewHolder的getAdapterPosition为 以前位于0的位置将立即开始返回1。
- 只要您调度细致的通知事件,您就始终处于良好状态(我们知道 适配器位置,即使尚未计算出新布局)。
有人可以简单地解释上述原因和解决方法吗?
答案 0 :(得分:0)
-1
表示无法计算滚动或实际位置无效(在中间)。
解决方案是忽略它
if (getAdapterPosition() == -1) return;