我使用RecyclerView
来显示一些文本数据。我在其中选择了不同的卡片。
我想改变所选卡片的外观。
public void toggleSelection(int pos)
{
RecyclerView.ViewHolder viewHolder = recView.findViewHolderForPosition(pos);
if (selectedItems.get(pos, false)) {
selectedItems.delete(pos);
viewHolder.itemView.setBackgroundColor(Color.WHITE);
}
else {
selectedItems.put(pos, true);
viewHolder.itemView.setBackgroundColor(Color.GREEN);
}
notifyItemChanged(pos);
}
如果我使用这样的代码就可以了。我的onClick事件触发此代码,我的卡背景颜色变为绿色。
所以这是我的问题:向下滚动显示具有相同背景颜色的相同相对位置(但在列表中更下方)的其他卡片,即使它们未被选中;选择第一张卡并向下滚动到第八张卡是顶部可见卡的位置,显示第八张卡突出显示。
答案 0 :(得分:6)
您需要在onBindViewHolder()
方法中明确设置颜色。
回收者视图的名称表示回收视图,因此第0项被回收为您案例中的第8项。它们使用使用onCreateViewHolder()
方法创建的相同视图持有者。每当其中任何一个进入视图时,都会调用onBindViewHolder()
方法。
我建议你在数据模型中创建一个额外的布尔字段,告诉你是否突出显示了视图。您应该在toggleSelection()
中切换它。
然后在onBindViewHolder()
中检查此字段的值并相应地设置颜色。