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

如何隐藏横向LinearLayoutManager的RecyclerView中仅被点击项的标题

解决RecyclerView横向列表点击隐藏标题后复用项异常隐藏的问题

问题原因

RecyclerView 的 ViewHolder 采用复用机制,你直接在点击事件中修改 ViewHolder 内 TextView 的可见性,当该 ViewHolder 被复用到其他列表项(如滚动后的第8、15、22项等)时,会保留之前的隐藏状态,导致这些无关项的标题也被隐藏。

解决方案

1. 扩展数据模型,添加状态字段

在 HomeProduitsPromoInnerItem 类中新增一个布尔字段,用于记录当前项的标题可见状态:

public class HomeProduitsPromoInnerItem {
    // 原有字段保持不变
    private boolean isTitleVisible = true; // 默认标题可见

    // 提供getter和setter方法
    public boolean isTitleVisible() {
        return isTitleVisible;
    }

    public void setTitleVisible(boolean titleVisible) {
        isTitleVisible = titleVisible;
    }
}

2. 修改适配器绑定逻辑,基于数据状态更新UI

在适配器的 onBindViewHolder 方法中,根据数据模型的状态设置标题可见性,并在点击事件中更新数据状态后通知适配器刷新:

@Override
public void onBindViewHolder(final MyViewHolder holder, final int i) {
    final HomeProduitsPromoInnerItem singleItem = dataSet.get(i);

    // 原有赋值逻辑保持不变
    holder.nomProduit.setText(singleItem.getNomProduitWithUnite());
    holder.prixProduit.setText(singleItem.getPrixProduit());
    holder.prixBarre.setText(singleItem.getPrixBarre());
    holder.prixBarre.setPaintFlags(holder.prixBarre.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

    int placeholder = R.drawable.ic_category_def;
    Glide.with(holder.itemView)
            .load(singleItem.getUrlImage())
            .placeholder(placeholder)
            .fitCenter()
            .into(holder.itemImage);

    // 根据数据状态设置标题可见性
    holder.nomProduit.setVisibility(singleItem.isTitleVisible() ? View.VISIBLE : View.INVISIBLE);

    holder.nomProduit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 更新数据模型的状态
            singleItem.setTitleVisible(false);
            // 通知适配器刷新当前位置的项
            notifyItemChanged(i);
        }
    });
}

通过将UI状态与数据模型绑定,RecyclerView 在复用 ViewHolder 时会根据对应数据的状态重新渲染UI,避免了复用导致的异常状态保留问题。

内容的提问来源于stack exchange,提问作者Landry Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:43:19