微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – onBindViewHolder()中的constructor.getAdapterPosition()与构造函数的position属性有什么区别[复制]

参见英文答案 > Lint error “Do not treat position as fixed; only use immediately…”                                    1个
这是我的代码

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方法调用,则两者都应返回相同的结果.我建议使用位置,因为它是最简单和最安全的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐