我正在使用一个使用 ViewHolder 模式并利用缓存机制的 ListView 。这是我尝试设置列表项背景之一的代码 fragment
if(drawable!=null)
{
if(this.backgroundBurnColor!=null && this.backgroundBurnColor.getValue()!=0)
{
Log.d("burncolor", this.backgroundBurnColor.getValue()+"");
drawable.setColorFilter(this.backgroundBurnColor.getValue(), Mode.MULTIPLY);
}else if(this.burnColorKey!=null)
{
Log.d("burncolor", this.Owner.getOwner().getColors().get(this.burnColorKey).getValue()+"");
drawable.setColorFilter(this.Owner.getOwner().getColors().get(this.burnColorKey).getValue(), Mode.MULTIPLY);
}else{
drawable.setColorFilter(null);
}
v.setBackgroundDrawable(drawable);
}
在此代码中,drawable 用于相同的项目类型,但即使当我更改可绘制图像时相同的项目类型也会根据我的需要进行更改。但是更改可绘制对象的颜色过滤器会更改出现在屏幕上的列表部分中的每个可绘制对象过滤器。例如,当我向下滚动列表并且屏幕上出现不同的滤色器时,所有可绘制对象的滤色器都变成相同的滤镜,我需要为每一行获取单独的滤色器。有什么帮助吗?谢谢
最佳答案
对于那些想知道答案的人, Romain Guy 有一篇关于 android 中可绘制突变的博客文章: http://www.curious-creature.org/2009/05/02/drawable-mutations/
当从资源中引用 drawable 时,只有一个 Drawable 实例被初始化,所以所有引用都引用同一个对象。为此,可绘制对象有一个 mutate()
方法
而不是写
drawable.setColorFilter(null);
写作
drawable.mutate().setColorFilter(null);
会解决问题
关于android - 不同颜色过滤器的 ListView 缓存不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11435155/