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

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

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

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

代码:

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

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

最佳答案

根据 Drawable 的文档:

By default, all drawables instances loaded from the same resource share a common state; if you modify the state of one instance, all the other instances will receive the same modification.

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

关于android - PorterDuffColorFilter 更改我的 recyclerview 中的所有图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54692211/

相关文章:

android - 使用 USB 套接字将文件从设备传输到电脑

Android TextView 将文本左右对齐

java - 获取recyclerview中的按钮状态

android - MVVM 设置 Recyclerview 适配器,其中包含 fragment 中的项目

java - Twitter Android SDK 不执行回调

android - ListView Adapter 为单个点击事件同时在多行上执行 onclick 方法

android - 尝试从 SQLite 获取 ID 时应用程序崩溃

android - 如何在build.gradle文件中创建一个开放类?

android - NestedScrollview 不会从顶部开始

java - 我有一个用作搜索栏的 editText,如果用户没有在搜索栏上输入任何内容,我该如何隐藏 recyclerView 项目