1

所以-我有一个recyclerview,如果我点击一个项目,我想更改我的drawable的colorFilter,它附加到我的textView中点击的位置。

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

代码:

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

这个for循环在我的适配器的'onBindViewHolder'中被调用,当我点击时 - 我用我的位置调用notifyItemChanged,我已经三重检查了它,这个函数只运行一次,我点击了正确的位置..那么为什么一切都会改变?

4

1 回答 1

1

根据以下文档Drawable

默认情况下,从同一资源加载的所有可绘制实例共享一个公共状态;如果您修改一个实例的状态,所有其他实例将收到相同的修改。

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

于 2019-02-14T14:09:48.587 回答