Динамически оттягиваемый оттенок в адаптере меняет цвет для всех - PullRequest
0 голосов
/ 22 октября 2019

Я получаю массив строк с моего сервера, используя залповое соединение. Каждая строка содержит разный цвет в шестнадцатеричном виде. Я использую этот цвет, чтобы установить оттенок отрисовываемого в адаптере.

Вот мой код в адаптере:

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
    // Get item from position
    MyObject object = array_data.get(position);
    ...
    ...
    Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.ic_beenhere_black_24dp);
    Drawable wrappedDrawable;
    if (unwrappedDrawable != null) {
        wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
        DrawableCompat.setTint(wrappedDrawable, object.getMyColor());
        holder.imvPreparationTime.setImageDrawable(wrappedDrawable);
    }

К сожалению, поведение не является правильным. Все нарисованные элементы в представлении переработчика имеют один и тот же цвет, и он изменяется для всех во время прокрутки.

enter image description here

Как я могу выполнить свою цель? Я хочу, чтобы каждый предмет имел свой цвет и не менялся.

1 Ответ

0 голосов
/ 22 октября 2019

Поскольку recyclerView многократно использует предметы, такое поведение часто встречается. Самый простой способ - это установить, если еще для просмотра вы хотите установить оттенок. Например,

if (unwrappedDrawable != null) {
        wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
        DrawableCompat.setTint(wrappedDrawable, object.getMyColor());
        holder.imvPreparationTime.setImageDrawable(wrappedDrawable);
    } else {
        holder.imvPreparationTime.setImageDrawable(<Some Other drawable, for example default one>);
    }

Идея состоит в том, чтобы заставить переработчика рисовать что-либо на элементе, а не использовать уже установленное.

...