为什么 RecyclerView.ViewHolder.getAdapterPosition() returns -1?

Why RecyclerView.ViewHolder.getAdapterPosition() returns -1?

我已经成功地实现了 RecyclerView,最近遇到了从视图中删除一些项目的边缘用例。

我将视图持有者传递给方法 RecyclerView.ViewHolder viewHolder,然后访问 ViewHolder 方法 getAdapterPosition(),如下所示:

int position = viewHolder.getAdapterPosition();

问题是调用了几次之后。 (删除一些项目后。)它将位置设置为 -1。由于日志,我知道这一点。我也知道当第一项被删除时没有问题并且正在调用 notifyDataSetChanged()

除了内联检查之外,这些是否是另一种可以确保位置永远不会 returned 为 -1 的特定更新方法?

更新: getAdapterPosition() 正在 returning NO_POSITION 因为自上次 notifyDataSetChanged() 以来布局传递没有发生称呼。使用 getLayoutPosition() 解决了 -1 return 问题。

viewholder 项已删除。

#getAdapterPosition() return: 项目的适配器位置(如果它仍然存在于适配器中)。 NO_POSITION 如果项目已从适配器中删除,

其中 NO_POSITION = -1

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getAdapterPosition()