admin 管理员组

文章数量: 1184232

public void onBindViewHolder(myViewHolder holder, int position) {

//1. details obj = list.get(holder.getAdapterPosition());

//2. details obj = list.get(position);

holder.position = position;

}

我收到了警告

Do not treat position as fixed; only use immediately and call

holder.getAdapterPosition() to look it up later RecyclerView will not

call onBindViewHolder again when the position of the item changes in

the data set unless the item itself is invalidated or the new position

cannot be determined. For this reason, you should only use the

position parameter while acquiring the related data item inside this

method, and should not keep a copy of it. If you need the position of

an item later on (e.g. in a click listener), use getAdapterPosition()

which will have the updated adapter position later.

所以我对1和2感到困惑,我应该选择哪个?为什么?正如它说getAdapterPosition()提供更新的位置,我从列表中获取基于位置的值.

谢谢.

解决方法:

你得到的警告不是关于使用position或getAdapterPosition().这是关于保存位置:

holder.position = position;

您不需要在持有者中保存头寸,因为它的位置可以改变,您可以通过调用holder.getAdapterPosition();

来自文档:

Note that unlike ListView, RecyclerView will not call this method

again if the position of the item changes in the data set unless the

item itself is invalidated or the new position cannot be determined.

For this reason, you should only use the position parameter while

acquiring the related data item inside this method and should not keep

a copy of it. If you need the position of an item later on (e.g. in a

click listener), use getAdapterPosition() which will have the updated

adapter position.

关于使用哪个:

如果在onBindViewHolder方法中调用,则两者都应返回相同的结果.我建议使用位置,因为它是最简单和最安全的.

标签:android,java

来源: https://codeday.me/bug/20190727/1554235.html

本文标签: 有什么区别 函数 属性 onBindViewHolder bindviewjava