这是我的代码 -
public void onBindViewHolder(myViewHolder holder, int position) {
//1. details obj = list.get(holder.getAdapterPosition());
//2. details obj = list.get(position);
holder.position = position;
}
Run Code Online (Sandbox Code Playgroud)
我收到了警告
不要把位置视为固定; 只有立即使用并调用holder.getAdapterPosition()才能查找以后,当项目的位置在数据集中发生变化时,RecyclerView将不会再次调用onBindViewHolder,除非项目本身无效或无法确定新位置.因此,您只应在获取此方法中的相关数据项时使用position参数,并且不应保留它的副本.如果您稍后需要项目的位置(例如,在单击侦听器中),请使用getAdapterPosition(),稍后将更新适配器位置.
所以我对1和2感到困惑,我应该选择哪个?为什么?正如它说getAdapterPosition()提供更新的位置,我从列表中获取基于位置的值.
谢谢.
你得到的警告不是关于使用position
或getAdapterPosition()
.这是关于保存位置:
holder.position = position;
Run Code Online (Sandbox Code Playgroud)
您不需要保存持有人的位置,因为它的位置可以改变,您可以随时通过呼叫获得其位置holder.getAdapterPosition()
;
来自文档:
请注意,与ListView不同,如果项目的位置在数据集中发生更改,则RecyclerView不会再次调用此方法,除非项目本身无效或无法确定新位置.因此,您只应在获取此方法中的相关数据项时使用position参数,并且不应保留它的副本.如果您稍后需要某个项目的位置(例如,在单击侦听器中),请使用具有更新的适配器位置的getAdapterPosition().
关于使用哪个:
如果在onBindViewHolder
方法内部调用,则两者都应返回相同的结果.我建议使用,position
因为它是最简单和最安全的.
归档时间: |
|
查看次数: |
3245 次 |
最近记录: |