Android RecyclerView onBindViewHolder单击侦听器更改错误单元格的内容

Android RecyclerView onBindViewHolder单击侦听器更改错误单元格的内容,android,android-recyclerview,android-viewholder,Android,Android Recyclerview,Android Viewholder,我有一份食物清单上的回收视图。当您单击该项目时,我希望该项目变灰。现在这确实起作用了,我按下的第一个项目确实变成了灰色。然而,当我再次按下它时,其他一些单元格会变成灰色。然后就变成一团乱,随机的变灰了 我已经设置好,当您单击该项时,FoodItem实例有一个布尔集。然后,我刷新recyclerview的数据,以便具有布尔集的项具有灰色覆盖 这是我的适配器: [ 为什么会发生这种情况?谢谢你错过了另一个选择 if(currentFoodItem.isHasBeenEaten()){

我有一份食物清单上的回收视图。当您单击该项目时,我希望该项目变灰。现在这确实起作用了,我按下的第一个项目确实变成了灰色。然而,当我再次按下它时,其他一些单元格会变成灰色。然后就变成一团乱,随机的变灰了

我已经设置好,当您单击该项时,FoodItem实例有一个布尔集。然后,我刷新recyclerview的数据,以便具有布尔集的项具有灰色覆盖

这是我的适配器:

[


为什么会发生这种情况?谢谢你错过了另一个选择

 if(currentFoodItem.isHasBeenEaten()){
      holder.eatenOverlay.setVisibility(View.VISIBLE);
 } else {
      holder.eatenOverlay.setVisibility(View.INVISIBLE);
 }

需要一个else分支,否则由于循环使用,您可以使用以前的“配置”重用以前的视图。

您只是缺少了另一个选项

 if(currentFoodItem.isHasBeenEaten()){
      holder.eatenOverlay.setVisibility(View.VISIBLE);
 } else {
      holder.eatenOverlay.setVisibility(View.INVISIBLE);
 }

需要一个else分支,否则由于循环,您可以使用以前的“配置”重用以前的视图。

您应该在ViewHolder类中实现onclick listener并从GetAdapterPosition()获取位置;您应该在ViewHolder类中实现onclick listener并从GetAdapterPosition()获取位置;谢谢,就这样!即将发表同样的评论,这是一个相当快的回答:P汉克斯,就是这样!即将发表同样的评论,这是一个相当快的回答:P
 if(currentFoodItem.isHasBeenEaten()){
      holder.eatenOverlay.setVisibility(View.VISIBLE);
 } else {
      holder.eatenOverlay.setVisibility(View.INVISIBLE);
 }