PorterDuffColorFilter меняет все значки в моем recyclerview

Итак, у меня есть recyclerview, и если я нажму на элемент, я хочу изменить colorFilter моего рисунка, который прикреплен к моему textView в позиции, в которой щелкнули.

проблема в том, что когда я меняю цвет моего рисунка, он меняется во всех элементах, а не только в позиции, по которой щелкнули.

код:

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

этот цикл for вызывается в «onBindViewHolder» моего адаптера, когда я нажимаю — я вызываю notifyItemChanged с моей позицией, я трижды проверил это, эта функция запускается только один раз с моей правильной позицией. .. так почему все меняется?


person JozeRi    schedule 14.02.2019    source источник


Ответы (1)


Согласно документации Drawable:

По умолчанию все экземпляры drawable, загруженные из одного и того же ресурса, имеют общее состояние; если вы измените состояние одного экземпляра, все остальные экземпляры получат такое же изменение.

Вам нужно получить новый экземпляр (на самом деле в большинстве случаев новым является только состояние) этого чертежа, который больше не использует состояние, используя mutate().

person Gergely Kőrössy    schedule 14.02.2019
comment
Именно объяснения мне не хватало, забыл об этом! благодарю вас :) - person JozeRi; 14.02.2019