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,提问作者Тульский Пряник
相关产品推荐
相关产品推荐

