Android RecyclerView不断重复缓存的(?)子视图,而不查看onBindViewHolder
我有一个RecyclerView,其中每个列表项都有一个ImageButton,我在适配器的onBindViewHolder()中定义了它的图像: 因此,ratingButton在列表项布局的右下角是一个星形。如果满足条件(myVote!=0),则其形状将填充灰色(并相应地推送日志记录) 问题是,当我向下滚动列表时,我可以看到其他星星被填满,即使我在日志窗口中只能看到一条记录(对于正确的列表项)。此外,此列表中按钮更改不正确的项目每5行重复一次,这让我感到困惑。如果我更改mListView.setItemViewCacheSize(0);重复周期更改为3,因此我们可以假设它与RecyclerView的缓存和回收机制有某种联系 mListView.setItemViewCacheSize(0);Android RecyclerView不断重复缓存的(?)子视图,而不查看onBindViewHolder,android,android-recyclerview,Android,Android Recyclerview,我有一个RecyclerView,其中每个列表项都有一个ImageButton,我在适配器的onBindViewHolder()中定义了它的图像: 因此,ratingButton在列表项布局的右下角是一个星形。如果满足条件(myVote!=0),则其形状将填充灰色(并相应地推送日志记录) 问题是,当我向下滚动列表时,我可以看到其他星星被填满,即使我在日志窗口中只能看到一条记录(对于正确的列表项)。此外,此列表中按钮更改不正确的项目每5行重复一次,这让我感到困惑。如果我更改mListView.se
请帮我解决这个问题。谢谢 尝试将代码更改为:
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
} else {
holder.ratingButton.setImageResource(int another resource);
}
}
别忘了实施
public long getItemId(int position) {}
否则,您将在RecyclerView中看到重复项。您可能还必须使用
其他资源编写主要条件的一部分,如:
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
} else {
holder.ratingButton.setImageResource(int another_resource);
}
它对我有效。您正在显示测试的if
块myVote!=0
。请粘贴到else
块中,在该块中调用setImageResource()
获取其他值。而且,如果您没有这样的else
块,那将是您的问题。按照建议的方式实现getItemId()和getItemViewType(),getItemId实现对于这个问题似乎没有用处
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
} else {
holder.ratingButton.setImageResource(int another_resource);
}