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

RecyclerView OnBindViewHolder中ProgressBar设置view.GONE无效求助

RecyclerView onBindViewHolder中ProgressBar设置GONE无效的解决方法

嘿,我一眼就瞅出你代码里的核心问题了——你在onBindViewHolder里重新inflate了list_item布局!你新创建的这个view和RecyclerView复用的ViewHolder里的itemView根本不是同一个实例,你对着这个“假”布局里的ProgressBar设置可见性,自然不会影响到屏幕上实际显示的那个item。而TextView的设置可能是你后续误打误撞用了holder里的控件,才看起来正常。

给你一步步修正的方案:

1. 先把ViewHolder写对

ViewHolder的作用就是提前缓存item里的控件引用,避免每次绑定都重复findViewById,更不能在绑定的时候重新inflate布局。正确的ViewHolder应该是这样:

public class DataHolder extends RecyclerView.ViewHolder {
    // 直接在ViewHolder里声明要操作的控件
    public TextView text;
    public ProgressBar progressBar;

    public DataHolder(View itemView) {
        super(itemView);
        // 从ViewHolder持有的itemView里找控件,这才是实际显示的布局
        text = itemView.findViewById(R.id.textView6);
        progressBar = itemView.findViewById(R.id.progressBar2);
    }
}

2. 修正onBindViewHolder逻辑

绑定的时候直接用holder里的控件,不要再搞什么新的inflate操作了:

@Override 
public void onBindViewHolder(DataHolder holder, int position) { 
    ListItem item = listdata.get(position); 

    // 直接操作holder中的ProgressBar,这才是当前显示的item对应的控件
    holder.progressBar.setVisibility(View.GONE);
    // 同时设置TextView的内容,也用holder里的引用
    holder.text.setText(item.getYourTextContent());
}

额外要检查的小细节

  • 确认你的list_item.xml布局里,ProgressBar的初始可见性没有被android:visibility固定住(比如设成了visible且被其他逻辑强制覆盖)
  • 如果是在异步任务(比如网络请求)完成后才要隐藏ProgressBar,记得调用notifyItemChanged(position)通知RecyclerView刷新对应位置的item,不然控件状态不会更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:02:54