【发布时间】:2020-04-07 09:50:17
【问题描述】:
我想在我的RecyclerView ViewHolder 中更改ViewGroup 的背景色调,但它一直在抛出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
【问题讨论】:
-
您是否在某处的
ViewGroup上设置了背景?默认情况下它不会有一个。 -
不,那会是个问题。
-
如果你只是想改变视图组的颜色,你可以这样做:viewGroup.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent))
标签: android android-layout kotlin android-recyclerview android-color