android - itemView.getTag() 返回 -1

标签 android android-recyclerview

我正在使用 RecyclerView,我想查看我点击的列表项的数据。我正在使用 itemView.getTag() 获取索引的值并将其类型转换为我的 CustomAdapter

我尝试了各种方法但没有帮助。请帮助我。

这是我的代码:

public class DonorAdapter extends RecyclerView.Adapter<DonorAdapter.ViewHolder> {

    ArrayList<Donor> donorsList;

    ItemSelected activity;
    public interface ItemSelected{
        void onItemClicked(int index);
    }
    public DonorAdapter(Context context, ArrayList<Donor> list){


        activity = (ItemSelected) context;
        donorsList = list;
    }

    public class ViewHolder extends RecyclerView.ViewHolder
    {
        ImageView ivDonorGender;
        TextView tvListName;
        TextView tvBloodGroup;
        public ViewHolder(@NonNull final View itemView) {
            super(itemView);
            ivDonorGender = itemView.findViewById(R.id.ivDonorGender);
            tvListName = itemView.findViewById(R.id.tvListName);
            tvBloodGroup = itemView.findViewById(R.id.tvListBloodGroup);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    activity.onItemClicked(donorsList.indexOf((Donor) itemView.getTag()));
                }
            });
        }
    }
@NonNull
    @Override
    public DonorAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.donors_list, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull DonorAdapter.ViewHolder holder, int position) {
        holder.tvListName.setText(donorsList.get(position).getName());
        holder.tvBloodGroup.setText(donorsList.get(position).getSurname());

      }
    }

    @Override
    public int getItemCount() {
        return donorsList.size();
    }
}

我是android的新手所以如果我不能正确解释请原谅我

这是有问题的部分

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
    activity.onItemClicked(donorsList.indexOf((Donor)                
    itemView.getTag()));
}

最佳答案

我认为你需要在onBindViewHolder中为每个回收元素设置标签

@Override
public void onBindViewHolder(@NonNull DonorAdapter.ViewHolder holder, int position) {
    holder.tvListName.setText(donorsList.get(position).getName());
    holder.tvBloodGroup.setText(donorsList.get(position).getSurname());
    holder.itemView.setTag(donorsList.get(position)); // change here
  }
}

关于android - itemView.getTag() 返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65315729/

相关文章:

Android 一起从图库或相机显示选项中选择图像

android - 自定义 selectableItemBackground

android - 从 RecyclerAdapter 上的 firebase 中删除数据

android - Android Map底部的RecyclerView

android - 是否可以向 Firebase 动态链接添加自定义参数?

java - 如何在android中解析这个Json数组

android - 在android中的recyclerview中添加预加载 View

android - 在 SwipeRefreshLayout 中使用 RecyclerView 时,底部的滚动效果不会出现

android - 如何在 Android 中使用横向和纵向连续处理音频?

android - 如何检查当前 Activity 是否是java中的主要/启动 Activity