Изменить CardBackgroundColor на RecyclerView - PullRequest
1 голос
/ 29 апреля 2019

У меня есть следующий код в 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 backgroundColor не меняется.

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

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

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

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

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

if (elem.getID() == items[position].getPriority())
    {
        holder.mCard.setCardBackgroundColor(ContextCompat.getColor(mContext, [first color]))  
    } else {
        holder.mCard.setCardBackgroundColor(ContextCompat.getColor(mContext,[second color]))
    }
0 голосов
/ 29 апреля 2019

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

#ffc2c2c2

  • ff: альфа
  • c2: красный
  • c2: зеленый
  • c2: синий
...