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

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

码:

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


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

最佳答案

根据Drawable的文档:


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


您需要使用mutate()方法获取该drawable的新实例(实际上大多数情况下只有状态是新的),该实例不再共享该状态。

10-04 12:21
查看更多