Java RecyclerView onClick提供了错误的项

Java RecyclerView onClick提供了错误的项,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个显示学生详细信息列表的RecyclerView。我面临的问题是,当我单击第一项时,它会返回第二项的数据。 我相信这与getAdapterPosition有关,但我不确定 在这种情况下,当选择第一个学生时,它返回第二个学生项目的卷号 谢谢你的帮助 循环水泵 是,因为您正在将对象声明为全局对象。因此,它将使用最后一个可见行的对象进行更新,因为onBindViewHolder将按顺序为每个可见行调用。因此,它只能在最后一行正常工作 所以您需要在方法中声明它: 评论如下: // publi

我有一个显示学生详细信息列表的RecyclerView。我面临的问题是,当我单击第一项时,它会返回第二项的数据。 我相信这与getAdapterPosition有关,但我不确定

在这种情况下,当选择第一个学生时,它返回第二个学生项目的卷号

谢谢你的帮助

循环水泵


是,因为您正在将对象声明为全局对象。因此,它将使用最后一个可见行的对象进行更新,因为onBindViewHolder将按顺序为每个可见行调用。因此,它只能在最后一行正常工作

所以您需要在方法中声明它:

评论如下:

   // public StudentDataModel dataAdapter;
在此声明:

@Override
public void onBindViewHolder(final StudentAdapter.ViewHolder viewHolder, final int position) {

   final StudentDataModel dataAdapter =  dataModels.get(position); // add this here

}

是,因为您正在将对象声明为全局对象。因此,它将使用最后一个可见行的对象进行更新,因为onBindViewHolder将按顺序为每个可见行调用。因此,它只能在最后一行正常工作

所以您需要在方法中声明它:

评论如下:

   // public StudentDataModel dataAdapter;
在此声明:

@Override
public void onBindViewHolder(final StudentAdapter.ViewHolder viewHolder, final int position) {

   final StudentDataModel dataAdapter =  dataModels.get(position); // add this here

}
请尝试此代码。。 将接口制作成适配器类,以便像这样进行单击处理

 onItemClickListner onItemClickListner;

public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

 public interface onItemClickListner{
    void onItemClick(String data); // pass any data;
}


@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    // below code handle click event on recycler view item.
    String data=mStringList.get(position);
    holder.textView.setText(data);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onItemClick(data); //pass your data;
        }
    });
}
之后,将适配器绑定到recyclerview和adapter not null中,然后在下面的代码中调用

    recyclerViewAdpater.setOnItemClickListner(new RecyclerViewAdpater.onItemClickListner() {
        @Override
        public void onItemClick(String data) {
            // perform your operation.
            recyclerViewAdpater.notifyDataSetChanged();
        }
    });
请尝试此代码。。 将接口制作成适配器类,以便像这样进行单击处理

 onItemClickListner onItemClickListner;

public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

 public interface onItemClickListner{
    void onItemClick(String data); // pass any data;
}


@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    // below code handle click event on recycler view item.
    String data=mStringList.get(position);
    holder.textView.setText(data);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onItemClick(data); //pass your data;
        }
    });
}
之后,将适配器绑定到recyclerview和adapter not null中,然后在下面的代码中调用

    recyclerViewAdpater.setOnItemClickListner(new RecyclerViewAdpater.onItemClickListner() {
        @Override
        public void onItemClick(String data) {
            // perform your operation.
            recyclerViewAdpater.notifyDataSetChanged();
        }
    });

为什么要在单击事件时通知数据更改??删除已更改的数据;检查一下。你为什么打电话给notifyDataSetChanged?第一个元素是否在recyclerview中显示正确的数据?我看到你在卡片的文本视图中设置了滚动,这是否也失败了?或者只是在单击侦听器上?首先,将onBindViewHolder final int position的arg更改为int position为什么要通知数据更改onClick事件??删除已更改的数据;检查一下。你为什么打电话给notifyDataSetChanged?第一个元素是否在recyclerview中显示正确的数据?我看到你在卡片的文本视图中设置了滚动,这是否也失败了?或者仅仅是单击侦听器?首先将onBindViewHolder final int position的arg更改为int position