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

RecyclerView滚动后Circle ProgressBar进度显示异常如何修复?

修复RecyclerView中圆形ProgressBar滚动后进度异常的问题

问题根源

你当前的代码中,所有RecyclerView的Item共用了同一个Drawable实例(MainActivity.progressDrawable),而Drawable是带有状态的对象,多个ProgressBar共享同一个Drawable时,设置进度会修改这个实例的全局状态。当RecyclerView滚动复用ItemView时,新的Item设置进度会覆盖旧Item的状态,导致进度显示错乱。

修复方案

每次绑定ViewHolder时,为当前Item的ProgressBar创建独立的Drawable实例,避免状态共享。可以通过mutate()方法让Drawable的状态独立,或者直接从资源中获取新的Drawable实例。

修改后的MyRecyclerViewAdapter代码

public void onBindViewHolder(ViewHolder holder, int position) {
    String title = mData.get(position);
    holder.myTextView.setText(title);
    
    // 为当前Item创建独立的Drawable实例
    Drawable progressDrawable = ContextCompat.getDrawable(mContext, R.drawable.progress_circle_yellow).mutate();
    holder.progressBar.setProgressDrawable(progressDrawable);
    holder.progressBar.setProgress(position);
}

补充说明

  • mutate()方法的作用是让Drawable脱离共享的状态池,确保每个ProgressBar的Drawable状态独立,不会互相干扰。
  • 也可以选择在ViewHolder的构造方法中初始化Drawable,但需要确保每个ViewHolder持有独立的实例,不过在onBindViewHolder中处理更直接适配动态进度的场景。

内容的提问来源于stack exchange,提问作者Тульский Пряник

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:25:21