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

如何解决CardView项点击设置背景色后返回页面颜色不保留的问题?

问题解决:CardView点击背景色返回后不保留的处理

问题原因

你当前的代码只是在点击时临时给CardView设置背景色,但没有将选中状态和数据源绑定。当跳转页面返回后,列表会重新触发onBindViewHolder方法绘制条目,此时没有依据数据状态恢复背景色,所以会回到默认样式。

解决方案步骤

  • 给你的数据模型添加一个标记字段,用来记录条目是否被点击过
  • 点击时更新对应数据的标记状态,并刷新条目
  • 在onBindViewHolder中根据数据标记统一设置背景色

代码修改示例

  1. 修改数据模型,添加状态字段(假设你的数据类是BusinessItem):
public class BusinessItem {
    // 原有业务字段
    private boolean isVisited; // 新增标记字段

    // getter和setter方法
    public boolean isVisited() {
        return isVisited;
    }

    public void setVisited(boolean visited) {
        isVisited = visited;
    }
}
  1. 修改点击事件逻辑,更新数据状态并刷新条目:
// 点击CardView的事件中
if (!arrayListBusinessList.get(position).equals("")){
    // 更新对应数据的选中状态
    arrayListBusinessList.get(position).setVisited(true);
    // 刷新当前条目,触发onBindViewHolder重新绘制
    notifyItemChanged(position);
    lastVisited(true, position);
    // 执行跳转页面的逻辑...
}
  1. 在onBindViewHolder中统一处理背景色:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    BusinessItem currentItem = arrayListBusinessList.get(position);
    
    // 根据数据的isVisited状态设置背景色
    if (currentItem.isVisited()) {
        holder.cardViewBusinessListItem.setCardBackgroundColor(ContextCompat.getColor(context, R.color.green));
    } else {
        // 设置默认背景色,替换成你原来的默认颜色值
        holder.cardViewBusinessListItem.setCardBackgroundColor(ContextCompat.getColor(context, R.color.default_card_bg));
    }

    // 其他原有数据绑定逻辑...
}

这样处理后,返回原页面时,列表重新绘制会读取数据中的isVisited状态,自动恢复对应的背景色。

内容的提问来源于stack exchange,提问作者Aniket Saste

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:45:40