Использование одного и того же ресурса значка векторного актива для нескольких элементов в представлении переработчика - PullRequest
0 голосов
/ 10 апреля 2020

Я упросту мою проблему. У меня есть 3 предмета в моем обзоре переработчика (каждый представляет студента). На макете элемента я показываю векторный актив "галочка" из android. (черный цвет по умолчанию) В зависимости от класса учащегося, элемент должен быть соответственно окрашен.

private void startMainDataValidationProcess(final FindChatsViewHolder holder, final int position, final Student model)
{

    /*
        some code
    */


    //check if the icon is already set
    if (  holder.validationTextView.getCompoundDrawables()[0] == null )
    {
        //if not already set, then add it here
        holder.validationTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_done_black_24dp,0,0,0);

    }

    Drawable[] drawables = holder.validationTextViewv.getCompoundDrawables(); //will return an array containing all 4 drawables (left, top,right, bottom)
    DrawableCompat.setTint(    drawables[0], ContextCompat.getColor(Objects.requireNonNull(getContext()), getIconColorResourceID(studentGrade)   )    );
}


 private int getColorResourceID(Integer grade)
 {

    if( grade) >= 90)
    {
        return R.color.colorGreen; //from my Color.xml file
    }
    else if( grade >= 70 && grade < 90  )
    {
        return R.color.colorBlue; //from my Color.xml file
    }
    else
    {
        return R.color.colorRed; //from my Color.xml file
    }
}

Он работает так, как это должно быть в API 29. Например, если я установил следующее:


Оценка предмета = 95
Оценка предмета = 75
Оценка предмета = 20

На экране переработчика я получаю соответственно:


значок item1: зеленый
значок item2: синий
значок item3: красный

НО При запуске одного и того же точного кода с API 26, я получаю: значок item1: красный значок item2 : красный значок item3: красный

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


значок item1: синий
значок item2: синий
значок item3: синий
значок item4: синий

1) Android создает копию вашего векторного значка (или ресурса) для каждого элемента в вашем адаптере ? Я предполагал, что так было с самого начала, и, поскольку я чувствовал, что в API 29 он работает нормально, у меня никогда не было никаких сомнений.

2) Почему один и тот же код ведет себя по-разному в API 26 ? почти как если бы один и тот же значок использовался совместно с 3-мя элементами, и каждый раз, когда добавляется 4-й элемент, все они меняются на этот цвет.

Чтобы найти способ обойти это, я полагаю, что я мог бы импортировать один и тот же значок 3 раза другим цветом (зеленый, синий, красный), затем нарисуйте правильный значок в зависимости от оценки вместо 1 значка и измените цвет. Однако я не удовлетворен этим решением, поскольку оно может увеличить размер моего приложения и т. Д. c ..

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...