Изменить CardBackgroundColor на RecyclerView

У меня есть следующий код в моем RecyclerView:

class TaskViewHolder(v: View) : RecyclerView.ViewHolder(v), View.OnClickListener
    {
        var mId: TextView = v.task_id
        var mDescription: TextView = v.task_description
        var mCard: CardView = v.task_card
        var mView: View = v
    }

override fun onBindViewHolder(holder: TaskViewHolder, position: Int)
{
    // Initialize ViewHolder content
    holder.mId.text = items[position].getID().toString()
    holder.mDescription.text = items[position].getDescription()
    holder.mTask = items[position]

    for (elem in priorities)
    {
        if (elem.getID() == items[position].getPriority())
        {
            holder.mCard.setCardBackgroundColor(Color.parseColor("#c2c2c2"))
            break
        }
    }
}

Я не знаю почему, но фоновый цвет CardView не меняется.

Если я использую следующий код, он работает правильно:

holder.mCard.setCardBackgroundColor(ContextCompat.getColor(holder.mView.context, R.color.priority3))

Что я должен сделать, чтобы установить CardBackgroundColor программно?


person Lechucico    schedule 29.04.2019    source источник
comment
Так в чем проблема ? Он работает отлично .. правильно   -  person Santanu Sur    schedule 29.04.2019
comment
Попробуйте заменить "#c2c2c2" на "#ffc2c2c2", чтобы убедиться, что вы указали правильный альфа-канал для цвета фона.   -  person Julio E. Rodríguez Cabañas    schedule 29.04.2019
comment
Строка цвета, для которой требуется альфа-компонент. Как сказал Хулио Э., вы должны добавить FF в строку цвета.   -  person cincy_anddeveloper    schedule 29.04.2019
comment
Я расширил свой комментарий и добавил его как фактический ответ, пожалуйста, посмотрите.   -  person Julio E. Rodríguez Cabañas    schedule 29.04.2019
comment
Итак, вам удалось заставить это работать с моим ответом?   -  person Julio E. Rodríguez Cabañas    schedule 01.05.2019


Ответы (2)


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

if (elem.getID() == items[position].getPriority())
    {
        holder.mCard.setCardBackgroundColor(ContextCompat.getColor(mContext, [first color]))  
    } else {
        holder.mCard.setCardBackgroundColor(ContextCompat.getColor(mContext,[second color]))
    }
person Dipakk Sharma    schedule 29.04.2019
comment
Вы правы в том, что для правильной работы рециркуляции должен быть предоставлен какой-то цвет по умолчанию. Однако нет необходимости передавать контекст в качестве параметра, поскольку к нему можно получить доступ через holder.mView.context. - person Julio E. Rodríguez Cabañas; 29.04.2019
comment
Да, вы можете использовать это тоже для контекста. тогда он у вас работает? - person Dipakk Sharma; 29.04.2019
comment
Я не тот, кто спрашивает, ха-ха. - person Julio E. Rodríguez Cabañas; 29.04.2019

Попробуйте заменить "#c2c2c2" на "#ffc2c2c2", чтобы убедиться, что вы указываете правильный альфа-канал для цвета фона. В Android этот дополнительный байт, добавленный в начале, представляет альфа-канал цвета:

#ffc2c2c2

  • ff: альфа
  • c2: красный
  • c2: зеленый
  • c2: синий
person Julio E. Rodríguez Cabañas    schedule 29.04.2019