android - 不同颜色过滤器的 ListView 缓存不起作用

标签 android android-listview android-view

我正在使用一个使用 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/

相关文章:

java - 我的 TextView 的奇怪布局

android - 在 Android 中以编程方式在当前相对布局下方添加相对布局

android - System.gc() 导致从 Activity 的第二次启动开始变慢

android - ListView 中的两个可点击项目

android - 如何在 Android View 中添加半透明覆盖?

android - android SQLite 查询是否延迟执行?

android - RxJava flatMapIterable 与 Single

android - 如何制作可滚动的应用程序小部件?

android - 向上滚动时在 ListView 中显示底部按钮栏,向下滚动时隐藏

java - 如何将ListActivity转换为AppCompatActivity