public void onBindViewHolder(MyViewHolder myViewHolder,int位置)

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

帮帮我,我不知道为什么仍然出现错误:

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)

请帮助我!!!!

java android adapter android-adapter android-adapterview
2个回答
0
投票

错误出现在哪一行?

如果不得不猜测是因为您在

clickListener
中使用了“位置”,请尝试在那里使用
myViewHolder.getAdapterPosition()

位置参数一直在变化,不能准确地映射列表中的位置。

例如您有一个包含 10 个项目的列表,并且屏幕上一次仅显示 4 个项目,因此您将看到的位置始终为 0 到 3。随着

RecyclerView
回收其视图持有者并重新绑定数据。这就是为什么你必须使用
getAdapterPosition
,因为这会给你直觉期望看到的位置。就像如果您滚动到列表末尾一样,您可以预期
getAdapterPosition
返回 10,而此时位置参数可能为 3,因为 4 个视图持有者之一正在被回收以显示不同的数据。

查看您的代码,我认为您真的不想在使用位置参数的任何地方使用它。将它们全部替换为

getAdapterPosition()


0
投票

删除此行

JPGCreationActivity.this.pos = position;

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