无法将Drawable添加到Drawables的ArrayList中-类型不匹配

时间:2019-05-07 10:33:01

标签: android kotlin

我正在像这样为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

我无法弄清楚出了什么问题。

2 个答案:

答案 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))