帮帮我,我不知道为什么仍然出现错误:
Do not treat position as fixed; only use immediately and call
myViewHolder.getAdapterPosition() to look it up later
这是我的代码
public void onBindViewHolder(MyViewHolder myViewHolder, int position) {
JPGCreationActivity.this.pos = position;
myViewHolder.imgPhoto.setImageBitmap(BitmapFactory.decodeFile(this.data.get(position)));
myViewHolder.tvImageName.setText(new File(this.data.get(position)).getName());
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent intent = new Intent(MyAlbumAdapter.this.mContext, FullScreenViewActivity.class);
intent.putExtra("ImagePosition", position);
intent.putStringArrayListExtra("arraylist", MyAlbumAdapter.this.data);
MyAlbumAdapter.this.mContext.startActivity(intent);
}
});
}
我已经在stackoverflow中阅读了有关此问题的一些问题,但我找不到我的项目的解决方案,它在
int position
中发出警报,我尝试阅读许多在线发布的人的其他代码,他们都编码像我一样public void onBindViewHolder(MyViewHolder myViewHolder, int position)
。
请帮助我!!!!
错误出现在哪一行?
如果不得不猜测是因为您在
clickListener
中使用了“位置”,请尝试在那里使用 myViewHolder.getAdapterPosition()
。
位置参数一直在变化,不能准确地映射列表中的位置。
例如您有一个包含 10 个项目的列表,并且屏幕上一次仅显示 4 个项目,因此您将看到的位置始终为 0 到 3。随着
RecyclerView
回收其视图持有者并重新绑定数据。这就是为什么你必须使用 getAdapterPosition
,因为这会给你直觉期望看到的位置。就像如果您滚动到列表末尾一样,您可以预期 getAdapterPosition
返回 10,而此时位置参数可能为 3,因为 4 个视图持有者之一正在被回收以显示不同的数据。
查看您的代码,我认为您真的不想在使用位置参数的任何地方使用它。将它们全部替换为
getAdapterPosition()
删除此行
JPGCreationActivity.this.pos = position;