我在Fragment中使用RecyclerView。点击RecyclerView items也反映在另一个位置上,例如,如果我选择0位置位置11也被设置为选中,如果我选择1位置那么位置12也被设置为选中。

下面是我的适配器类。
List<Data> dataList;
Context context;
public static OnItemClick click;
public void setClick(final OnItemClick click){
Wkdapter.click =click;
}下面是BindView方法
@Override
public void onBindViewHolder(@NonNull Wkdapter.Holder holder, int position) {
Data data=dataList.get(position);
holder.tv_playername_create_team.setText(data.getName());
}
public static class Holder extends RecyclerView.ViewHolder{
TextView tv_playername_create_team;
public Holder(View itemView) {
super(itemView);
tv_playername_create_team=itemView.findViewById(R.id.tv_playername_create_team);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (click!=null){
int pos=getAdapterPosition();
if (RecyclerView.NO_POSITION!=pos){ ;
click.onClicked(itemView,pos);
}
}
}
});
}
}这里我在片段中设置了Onclick
Wkdapter.setClick(new OnItemClick() {
@Override
public void onClicked(View view,int position){
data=dataList.get(position);
result.onResult(data,view,position);
}
});onResult方法
@Override
public void onResult(Data data, View view, int position){
Log.e(tag,"Name "+data.getName());
}发布于 2018-06-15 20:56:15
与我的经验类似,下面是我如何解决这个问题:
onBindViewHolder()上设置onClick。确保您的onClick具有来自onBindViewHolder()的position参数。不是从getAdapterPosition().RecyclerView.Adapter,重写getItemId(int position)和getItemViewType(int position)返回position。不要在那里做任何其他事情。在我的例子中,它是有效的。
发布于 2018-06-15 20:39:18
看起来像是回收的ViewHolder有问题。在onBindViewHolder函数中将按钮设置为正确的状态。例如,如果单击状态存储在您的数据对象中:
@Override
public void onBindViewHolder(@NonNull Wkdapter.Holder holder, int position) {
Data data=dataList.get(position);
holder.tv_playername_create_team.setText(data.getName());
click.onClicked(data.isClicked)
}发布于 2018-06-15 20:44:42
您将需要在数据类中维护选定的位置状态,如果没有维护状态,则在数据类中创建布尔isSelected变量,如果选中或取消选中,则还需要在onBindViewHolder中更新它。
@Override
public void onBindViewHolder(@NonNull Wkdapter.Holder holder, int position)
{
Data data=dataList.get(position);
if(data.isSelected()) {
// Set icon of selected state
} else {
// Set icon of unselected state
}
holder.tv_playername_create_team.setText(data.getName());
}https://stackoverflow.com/questions/50875555
复制相似问题