Я упросту мою проблему. У меня есть 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 ..
. Любая помощь и советы будут оценены. Это мой первый пост, так что прости меня, если я не соблюдаю правила этикета.