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
相关产品推荐
相关产品推荐

