RecyclerView 不断重复缓存的(?)子视图而不是寻找 onBindViewHolder
RecyclerView keeps repeating cached (?) subview and not looking to onBindViewHolder
我有 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),其形状将填充为灰色(相应地,将推送一条日志记录)。
问题是,当我向下滚动列表时,我可以看到其他星星被填充,即使我可以在日志中看到唯一的一条记录 window(对于正确的列表项)。此外,这个按钮更改不正确的列表项每 5 行重复一次,这让我感到困惑。如果我更改
mListView.setItemViewCacheSize(0);
重复周期变为 3,因此我们可以假设它以某种方式与 RecyclerView 的缓存和回收机制相关联。
请帮我解决这个问题。谢谢!
尝试将您的代码更改为:
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 中看到重复的项目。
您可能还需要用 some another resource
编写主要条件的 else
部分,例如:
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
} else {
holder.ratingButton.setImageResource(int another_resource);
}
对我有用。
我有 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),其形状将填充为灰色(相应地,将推送一条日志记录)。
问题是,当我向下滚动列表时,我可以看到其他星星被填充,即使我可以在日志中看到唯一的一条记录 window(对于正确的列表项)。此外,这个按钮更改不正确的列表项每 5 行重复一次,这让我感到困惑。如果我更改
mListView.setItemViewCacheSize(0);重复周期变为 3,因此我们可以假设它以某种方式与 RecyclerView 的缓存和回收机制相关联。
请帮我解决这个问题。谢谢!
尝试将您的代码更改为:
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 中看到重复的项目。
您可能还需要用 some another resource
编写主要条件的 else
部分,例如:
if (myVote != 0) {
Log.d("dbg", myVote + "");
holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
} else {
holder.ratingButton.setImageResource(int another_resource);
}
对我有用。