You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerView滚动时CardView点击效果重复出现问题求助

问题原因

这个问题是RecyclerView的条目复用机制导致的。RecyclerView只会创建刚好铺满屏幕+少量缓冲的ViewHolder对象,当条目滑出屏幕时,对应的ViewHolder会被复用来渲染新滑入屏幕的条目。你当前的onBindViewHolder方法仅对高亮状态的条目做了样式修改,没有对非高亮状态的条目做样式重置,导致原本被设置过高亮样式的ViewHolder被复用给非高亮条目时,保留了之前的高亮效果。

修复方案

修改DaysAdapter中的onBindViewHolder方法,补充非高亮状态的样式重置逻辑,示例如下:

@Override
public void onBindViewHolder(@NonNull DaysViewHolder holder, int position) {
    DaysModel currentItem = daysModels.get(position);
    holder.hDayName.setText(currentItem.getDayName());
    holder.hDayNumber.setText(String.valueOf(currentItem.getDayNumber()));
    
    if(currentItem.isDayHighlighted() == 1){
        holder.currentDayHighlight.setBackgroundResource(R.drawable.tiny_background);
        holder.hDayNumber.setTextColor(Color.BLACK);
    } else {
        // 这里替换为你布局文件中默认的背景和文字颜色即可
        holder.currentDayHighlight.setBackgroundColor(Color.TRANSPARENT);
        holder.hDayNumber.setTextColor(Color.WHITE);
    }
}

如果你的需求是单选高亮(点击新条目后自动取消之前条目的高亮),还需要同步修改dayClickHandler逻辑:

public void dayClickHandler(int position, int change){
    // 先取消原有高亮条目的状态
    for (int i = 0; i < daysModels.size(); i++) {
        if (daysModels.get(i).isDayHighlighted() == 1) {
            daysModels.get(i).changeDayHighlight(0);
            daysAdapter.notifyItemChanged(i);
            break;
        }
    }
    // 设置当前点击条目为高亮
    daysModels.get(position).changeDayHighlight(change);
    daysAdapter.notifyItemChanged(position);
}

内容的提问来源于stack exchange,提问作者Lv1 Slime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:09:01