为什么 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
我已经成功地实现了 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