为什么RecyclerView getAdapterPosition()返回-1?

时间:2019-02-10 16:50:00

标签: android android-recyclerview

我目前正在学习android,第一次添加滑动以删除RecyclerView的功能。我遇到了有关刷卡功能的以下理论,但是我无法理解下面讨论的关于getAdapterPosition将返回RecyclerView.NO_POSITION的原因。

  
      
  • 当适配器内容更改(并且您致电notify ***)时,RecyclerView会请求新的布局。
  •   
  • 从那时起,直到布局系统决定计算新的布局(<16 ms),该布局   位置和适配器位置可能不匹配,因为布局尚未反映适配器的更改。
  •   
  • 如果您正在调用notifyDataSetChanged,它将使所有内容无效,RecyclerView不知道   在计算下一个布局之前,ViewHolder的适配器位置。
  •   
  • 在这种情况下,getAdapterPosition将返回RecyclerView.NO_POSITION(-1)
  •   
  • 如果已调用notifyItemInserted(0),则ViewHolder的getAdapterPosition为   以前位于0的位置将立即开始返回1。
  •   
  • 只要您调度细致的通知事件,您就始终处于良好状态(我们知道   适配器位置,即使尚未计算出新布局)。
  •   

有人可以简单地解释上述原因和解决方法吗?

1 个答案:

答案 0 :(得分:0)

-1表示无法计算滚动或实际位置无效(在中间)。

解决方案是忽略它

if (getAdapterPosition() == -1) return;