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

如何解决RecyclerView中特定tracker值项ImageView异常显示问题

解决RecyclerView复用导致ImageView错误显示的问题

嘿,我来帮你搞定这个问题!你遇到的是RecyclerView非常典型的ViewHolder复用问题,咱们一步步拆解解决。

问题根源

RecyclerView为了性能优化,会复用已经滑出屏幕的ViewHolder。你现在的代码里,不管当前item的tracker值是什么,都直接把tv_buspointer设为VISIBLE——这就导致,当一个原本显示图标的ViewHolder被复用到不需要显示图标的item上时,图标不会自动隐藏,所以向上滚动时就出现了不该显示的图标。

解决方案

你需要在onBindViewHolder里根据当前item的tracker值,明确设置图标的显示/隐藏状态,而不是只设置显示逻辑。具体修改如下:

替换你原有的onBindViewHolder方法代码:

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
    // 填充站点名称文本
    holder.tv_stationName.setText(mList.get(position).stationName);
    
    // 根据当前item的tracker值判断图标显示状态
    station_after currentItem = mList.get(position);
    if (currentItem.getTracker() == 你的特定值) { // 把「你的特定值」替换成实际需要的数值,比如1
        holder.tv_buspointer.setVisibility(View.VISIBLE);
    } else {
        holder.tv_buspointer.setVisibility(View.GONE); // 若需要保留布局空间,可改用View.INVISIBLE
    }
}

关键说明

  • 必须同时处理「显示」和「隐藏」两种状态:因为ViewHolder复用后会保留之前的视图状态,只设置显示逻辑会导致复用的item继承上一个item的显示状态。
  • View.GONE与View.INVISIBLE的区别:前者会让控件完全消失,不占用布局空间;后者仅隐藏控件,仍保留原有布局位置,你可以根据UI需求选择。

这样修改后,每次绑定ViewHolder时都会根据当前item的tracker值正确设置图标状态,滚动时就不会出现错误显示的问题了。

内容的提问来源于stack exchange,提问作者jamie 8910

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:42:33