首页 > 解决方案 > getAdapterPosition 有时会返回错误的值

问题描述

我正在尝试为 RecyclerView 创建一个适配器,其中每个视图都包含一些信息和两个按钮,一个用于删除视图,一个用于更新信息。我将侦听器设置如下,并且我可以让操作按我的意愿工作(即removeRecepieandchooseNewRandomRecepie做我想让他们做的事情)。

但是,有时,getAdapterPosition 看似随机地发送了错误的位置。因此删除或更新发生在不正确的视图上(我已经测试了 的输出getAdapterPosition,并且输出与更改的视图一致,即错误的视图)。我写了setListener如下:

    void setListener(View view){
        Button removeButton = view.findViewById(R.id.remove_button);
        removeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                removeRecepie(getAdapterPosition());
            }
        });
        Button newRandomButton = view.findViewById(R.id.new_random);
        newRandomButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chooseNewRandomRecepie(getAdapterPosition());
            }
        });
    }

我将非常感谢任何帮助或提供帮助的指针。如果我可以提供任何进一步的信息来帮助您帮助我,请告诉我:)

标签: javaandroid

解决方案


你应该使用onBindViewHolder.

public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.removeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                removeRecepie(position);
            }
        });
        holder.removeButton.SetOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chooseNewRandomRecepie(position);
            }
        });
    }

    public class MyViewHolder extends  RecyclerView.ViewHolder implements View.OnClickListener {

        Button removeButton;
        Button newRandomButton;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            removeButton = itemView.findViewById(R.id.removebutton);
            newRandomButton = itemView.findViewById(R.id.newRandomButton);
        }
    }

推荐阅读