我正在像这样为RecyclerView构建可绘制对象的ArrayList-
private val draw: ArrayList<Drawable> = ArrayList()
draw.add(ResourcesCompat.getDrawable(resources, R.drawable.one, null))
但是对于第二行,我收到类型不匹配错误-
Required: Drawable
Found: Drawable?
导入为import android.graphics.drawable.Drawable
我无法弄清楚出了什么问题。
答案 0 :(得分:1)
ResourcesCompat.getDrawable(resources, R.drawable.one, null)
可以返回Drawable?
->,这也可以为空。现在您的ArrayList<Drawable>
不允许为空,因此您可以检查可绘制对象是否不为空,然后将其添加到列表中,例如:
val drawable = ResourcesCompat.getDrawable(resources, R.drawable.one, null)
drawable?.let { draw.add(it) }
如果value为null,使用!!
会引发NPE,因此您必须捕获它,并且?.
操作员会安全地检查该值是否为null。就像较短的if (drawable != null)
条件
还有第三个选项,如果您使用elvis运算符找到了null,则可以提供默认的drawable。
val drawable = ResourcesCompat.getDrawable(resources, R.drawable.one, null)
val defaultDrawable = ...
draw.add(drawable ?: defaultDrawable)
答案 1 :(得分:0)
使用
draw.add(ResourcesCompat.getDrawable(resources, R.drawable.one, null)!!)
代替
draw.add(ResourcesCompat.getDrawable(resources, R.drawable.one, null))