所以-我有一个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的新实例(实际上大多数情况下只有状态是新的),该实例不再共享该状态。