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

问题描述 投票:0回答:1

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

我将视图持有人传递给方法RecyclerView.ViewHolder viewHolder,然后像这样访问ViewHolder方法getAdapterPosition()

int position = viewHolder.getAdapterPosition();

问题是,多次调用此命令。 (删除一些项目后。)将位置设置为-1。我知道这是由于日志。我也知道,删除第一项没有问题,并且正在调用notifyDataSetChanged()

这是另一种可以确保除内联检查之外从未将位置返回为-1的特定更新方法吗?

UPDATE: getAdapterPosition()返回NO_POSITION,因为自上次notifyDataSetChanged()调用以来未发生布局传递。使用getLayoutPosition()解决了-1退货问题。

android android-recyclerview android-room notifydatasetchanged
1个回答
0
投票

查看者项被删除。

如果适配器中仍存在该项目,则该适配器的位置。如果已从适配器中删除项目,则为NO_POSITION,

其中NO_POSITION = -1

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

© www.soinside.com 2019 - 2024. All rights reserved.