Как изменить фоновый оттенок ViewGroup в коде? - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу изменить оттенок фона ViewGroup в моем RecyclerView ViewHolder, но он продолжает выдавать NullPointerException.

Эта пользовательская функция работает как для ImageView, так и для других Views, но по какой-то причине она не работает для ViewGroup.

private inner class TimeViewHolder(val root: ViewGroup): RecyclerView.ViewHolder(root){
        val minutesTv = root.findText(R.id.minutes)
        val hoursTv = root.findText(R.id.hours)

        fun bind(m: Order.Timeline, onClick: ()->Unit) {
            val a = mainActivity?:return
            with(m) {
                minutesTv.text = "%02d".format(minute)
                if (m.isClosest){
                    root.setBackgroundTint(R.color.highlight)
                } else {
                    root.setBackgroundTint(R.color.white)
                }
            }
        }
    }

fun View.setBackgroundTint(color: Int){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
        this.background.colorFilter = BlendModeColorFilter(ContextCompat.getColor(this.context, color), BlendMode.SRC_IN)
    } else {
        this.background.setColorFilter(ContextCompat.getColor(this.context, color), PorterDuff.Mode.SRC_IN)
    }
}

Исключение:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.drawable.Drawable.setColorFilter(int, android.graphics.PorterDuff$Mode)' on a null object reference

1 Ответ

0 голосов
/ 05 мая 2020

Я думаю, что ваш контекст может быть нулевым в вашем внутреннем классе TimeViewHolder. Вы можете получить свой контекст из viewGroup, который вызвал root как root .context и передать его в свой метод setBackgroundTint

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