所以-我有一个recyclerview,如果我单击一个项目,我想更改我的drawable的colorFilter,该对象在单击的位置附加到textView上。
问题是,当我更改可绘制对象的颜色时,它会更改所有项目,而不仅仅是单击位置。
代码:
for (drawable: Drawable? in textView.compoundDrawablesRelative) {
drawable?.colorFilter = PorterDuffColorFilter(getColor(textView.context, color), PorterDuff.Mode.SRC_IN)
}
此for循环在适配器的“ onBindViewHolder”中被调用,当我单击时-我用自己的位置调用notifyItemChanged,我对其进行了三重检查,该函数仅与我的设备一起运行一次单击正确的位置..那为什么一切都会改变?
答案 0 :(得分:1)
根据Drawable
的文档:
默认情况下,从同一资源加载的所有drawable实例都具有相同的状态;如果您修改一个实例的状态,则所有其他实例将收到相同的修改。
您需要使用mutate()
方法获取该可绘制对象的新实例(实际上,大多数情况下大多数情况下都是新的),而不再共享该状态。