RecyclerView不断重复缓存(?)子视图,而不是查看onBindViewHolder

son*_*ain 2 android android-recyclerview

我有RecyclerView,其中每个列表项都有一个ImageButton,我在适配器的onBindViewHolder()中定义了它的图像:

    int myVote = getMyVote();
    if (myVote != 0) {
        Log.d("dbg", myVote + "");
        holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
    }
Run Code Online (Sandbox Code Playgroud)

因此,ratingButton是列表项布局右下角的一颗星.如果满足条件(myVote!= 0),其形状将填充灰色(因此,按下日志记录).

问题是,当我向下滚动列表时,即使我可以在日志窗口中看到唯一的一条记录(对于正确的列表项),我也能看到其他星星被填满.此外,这个带有错误更改按钮的列表项每5行重复一次,这就是令我困惑的事情.如果我改变

mListView.setItemViewCacheSize(0);
重复周期变为3,因此我们可以假设它与RecyclerView的缓存和回收机制有某种联系.

请帮我解决问题.谢谢!

Vil*_*usK 9

别忘了实施

public long getItemId(int position) {}
Run Code Online (Sandbox Code Playgroud)

否则,您将在RecyclerView中看到重复的项目.


Ole*_*nko 5

尝试将您的代码更改为:

if (myVote != 0) {
        Log.d("dbg", myVote + "");
        holder.ratingButton.setImageResource(R.drawable.ic_star_grey600_36dp);
    } else {
        holder.ratingButton.setImageResource(int another resource);
    }
}
Run Code Online (Sandbox Code Playgroud)