是否在Kotlin地图中将Android可绘制和字符串资源检索为整数或字符串

问题描述

我在Android环境下学习Kotlin的时间只有两天。因此,构建Google课程骰子应用程序后,我决定检查是否可以通过将另一个名为res/的{​​{1}}文件夹添加到values/文件夹来本地化该应用程序。这是为了支持一种本地语言。

但是,事情是我想使用values-af_/方法设置contentDescription的{​​{1}}并将ImageView设置为getString(R.string.img_dice_1)。根据骰子的掷骰,这两个值都将包含在字典/地图/关联数组中。 这是检查num变量是否为特定数字并检索资源的条件:

setImageResource
R.drawable.image

从地图中检索值时,logcat会出现以下错误:

    val drawableRes = when (num) {
            1 -> mapOf("draw" to R.drawable.dice_1,"contDescription" to getString(R.string.img_dice_1))
            2 -> mapOf("draw" to R.drawable.dice_2,"contDescription" to getString(R.string.img_dice_2))
            3 -> mapOf("draw" to R.drawable.dice_3,"contDescription" to getString(R.string.img_dice_3))
            4 -> mapOf("draw" to R.drawable.dice_4,"contDescription" to getString(R.string.img_dice_4))
            5 -> mapOf("draw" to R.drawable.dice_5,"contDescription" to getString(R.string.img_dice_5))
            else -> mapOf("draw" to R.drawable.dice_6,"contDescription" to getString(R.string.img_dice_6))
        }

如果我不将地图的 imgOfDice.setImageResource(drawableRes["draw"] as Int) imgOfDice.contentDescription = (drawableRes["contDescription"] as Int).toString() 键转换为字符串,则会得到Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

有人可以指出正确的方向来检索地图值吗?

我找到了答案:我只需要将contDescription强制转换为Compiling error: Type mismatch: inferred type is Int but CharSequence! was expected,现在就可以了!

解决方法

是的,您正在尝试将“ draw”(字符串)转换为整数(R.drawable.x)

R.xx.xx始终返回整数值(例如ID)

val drawableRes = when (num) {
            1 -> mapOf(num to R.drawable.dice_1,"contDescription" to getString(R.string.img_dice_1))
            2 -> mapOf(num to R.drawable.dice_2,"contDescription" to getString(R.string.img_dice_2))
            3 -> mapOf(num to R.drawable.dice_3,"contDescription" to getString(R.string.img_dice_3))
            4 -> mapOf(num to R.drawable.dice_4,"contDescription" to getString(R.string.img_dice_4))
            5 -> mapOf(num to R.drawable.dice_5,"contDescription" to getString(R.string.img_dice_5))
            else -> mapOf(num to R.drawable.dice_6,"contDescription" to getString(R.string.img_dice_6))
        }
        imgOfDice.setImageResource(drawableRes[num] as Int)
        imgOfDice.contentDescription = (drawableRes["contDescription"] as Int).toString()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...