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