我已经成功实现了RecyclerView,最近在从视图中删除某些项目时遇到了一个边缘用例。
我将视图持有人传递给方法RecyclerView.ViewHolder viewHolder
,然后像这样访问ViewHolder方法getAdapterPosition()
:
int position = viewHolder.getAdapterPosition();
问题是,多次调用此命令。 (删除一些项目后。)将位置设置为-1
。我知道这是由于日志。我也知道,删除第一项没有问题,并且正在调用notifyDataSetChanged()
。
这是另一种可以确保除内联检查之外从未将位置返回为-1的特定更新方法吗?
UPDATE: getAdapterPosition()
返回NO_POSITION
,因为自上次notifyDataSetChanged()
调用以来未发生布局传递。使用getLayoutPosition()
解决了-1退货问题。
查看者项被删除。
如果适配器中仍存在该项目,则该适配器的位置。如果已从适配器中删除项目,则为NO_POSITION,
其中NO_POSITION = -1