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);
}

对我有用。