PorterDuffColorFilter更改我的recyclerview中的所有图标

时间:2019-02-14 14:01:56

标签: android android-recyclerview android-adapter porter-duff colorfilter

所以-我有一个recyclerview,如果我单击一个项目,我想更改我的drawable的colorFilter,该对象在单击的位置附加到textView上。

问题是,当我更改可绘制对象的颜色时,它会更改所有项目,而不仅仅是单击位置。

代码:

for (drawable: Drawable? in textView.compoundDrawablesRelative) {
    drawable?.colorFilter = PorterDuffColorFilter(getColor(textView.context, color), PorterDuff.Mode.SRC_IN)
}

此for循环在适配器的“ onBindViewHolder”中被调用,当我单击时-我用自己的位置调用notifyItemChanged,我对其进行了三重检查,该函数仅与我的设备一起运行一次单击正确的位置..那为什么一切都会改变?

1 个答案:

答案 0 :(得分:1)

根据Drawable的文档:

  

默认情况下,从同一资源加载的所有drawable实例都具有相同的状态;如果您修改一个实例的状态,则所有其他实例将收到相同的修改。

您需要使用mutate()方法获取该可绘制对象的新实例(实际上,大多数情况下大多数情况下都是新的),而不再共享该状态。