我有RecyclerView,其中每个列表项都有一个ImageButton,我在适配器的onBindViewHolder()中定义了它的图像:
int myVote = getMyVote();
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
}
所以ratingButton是列表项布局右下角的一颗星。如果满足条件(myVote!= 0),它的形状将填充灰色(因此,按下日志记录)。
问题在于,当我向下滚动列表时,即使我可以在日志窗口中看到唯一的一条记录(对于正确的列表项),我也能看到其他星星被填满。此外,这个带有错误更改按钮的列表项每5行重复一次,这让我很困惑。如果我改变
mListView.setItemViewCacheSize(0);,重复周期变为3,那么我们可以假设它与RecyclerView的缓存和回收机制有某种联系。
请帮我解决问题。谢谢!
答案 0 :(得分:9)
别忘了实施
public long getItemId(int position) {}
否则,您将在 RecyclerView 中看到重复的项目。
答案 1 :(得分:5)
尝试将您的代码更改为:
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
} else {
holder.ratingButton.setImageResource(int another resource);
}
}
答案 2 :(得分:2)
您可能还必须使用else
编写some another resource
部分主要条件,如:
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
} else {
holder.ratingButton.setImageResource(int another_resource);
}
这对我有用。