如何解决CardView项点击设置背景色后返回页面颜色不保留的问题?
问题解决:CardView点击背景色返回后不保留的处理
问题原因
你当前的代码只是在点击时临时给CardView设置背景色,但没有将选中状态和数据源绑定。当跳转页面返回后,列表会重新触发onBindViewHolder方法绘制条目,此时没有依据数据状态恢复背景色,所以会回到默认样式。
解决方案步骤
- 给你的数据模型添加一个标记字段,用来记录条目是否被点击过
- 点击时更新对应数据的标记状态,并刷新条目
- 在
onBindViewHolder中根据数据标记统一设置背景色
代码修改示例
- 修改数据模型,添加状态字段(假设你的数据类是
BusinessItem):
public class BusinessItem { // 原有业务字段 private boolean isVisited; // 新增标记字段 // getter和setter方法 public boolean isVisited() { return isVisited; } public void setVisited(boolean visited) { isVisited = visited; } }
- 修改点击事件逻辑,更新数据状态并刷新条目:
// 点击CardView的事件中 if (!arrayListBusinessList.get(position).equals("")){ // 更新对应数据的选中状态 arrayListBusinessList.get(position).setVisited(true); // 刷新当前条目,触发onBindViewHolder重新绘制 notifyItemChanged(position); lastVisited(true, position); // 执行跳转页面的逻辑... }
- 在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
相关产品推荐
相关产品推荐

