动态访问Kotlin类属性

时间:2019-01-17 22:10:36

标签: kotlin recycler-adapter

我想为RecyleView中的文本视图动态设置backgroundColor,因此并非我的所有商品的标签背景颜色都相同。

这是我想使用的伪代码:

val lowerType = pokemon.type.toLowerCase()
val id = holder.context.resources.getIdentifier(lowerType, "id", holder.context.packageName)
val color = ContextCompat.getColor(holder.context, id)

但是这种语法在Kotlin中似乎不起作用,而且我真的不知道如何根据项目的类型从资源中获取颜色值。

我也尝试过:

var map = new Microsoft.Maps.Map(document.getElementById('myMap'), {});

但这也会崩溃

2 个答案:

答案 0 :(得分:1)

以动态方式访问资源不是一个好主意,您将失去编译时的安全性和代码完成。在您的情况下,您可以创建一个Map,将每种视图类型与所需的资源(即 color )相关联。

示例

/* colors.xml */
<color name="color_view_1">#AA000000</color>
<color name="color_view_2">#AB000000</color>
<color name="color_view_3">#AC000000</color>
<color name="color_view_4">#AD000000</color>
<color name="color_view_default">#AE000000</color>

/* Adapter */
enum class ViewType {
    TYPE1, TYPE2, TYPE3
}

val colors = mapOf(
    ViewType.TYPE1 to R.color.color_view_1,
    ViewType.TYPE2 to R.color.color_view_2,
    ViewType.TYPE3 to R.color.color_view_3
)

/* onBindViewHolder */
val color = colors[viewType] ?: R.color.color_view_default

答案 1 :(得分:0)

您应该为"color"的第二个参数设置"id"而不是getIdentifier()

val id = holder.context.resources.getIdentifier(lowerType, "color", holder.context.packageName)