You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin/Android如何简化多资源引用?求代码优化方案

简化Kotlin资源引用重复代码的方案

一、批量获取控件,简化findViewById重复调用

不用逐个手动调用findViewById,可以通过动态获取资源ID+循环批量处理:

val paintingList = mutableListOf<ImageView>()
for (i in 1..6) {
    // 根据资源名称动态获取ID,参数依次是资源名、资源类型(这里是id)、包名
    val viewId = resources.getIdentifier("painting$i", "id", packageName)
    paintingList.add(findViewById(viewId))
}

getIdentifier会根据传入的名称匹配对应的资源ID,循环1到6就能一次性把所有目标控件加入列表。

二、简化when分支的图片资源设置

同样利用动态获取资源ID的逻辑,直接根据type值匹配对应的drawable资源,替代冗长的分支判断:

val targetType = paintingModels.paintings[i].type
val drawableId = resources.getIdentifier("painting$targetType", "drawable", packageName)
paintingList[i].setImageResource(drawableId)

只要type的数值和drawable资源名称的后缀(比如painting1的1)对应,一行代码就能完成资源设置,无需写6个when分支。

额外提示:避免资源不存在的异常

如果担心type值超出范围或资源名称不匹配,可以加个判断兜底:

val targetType = paintingModels.paintings[i].type
val drawableId = resources.getIdentifier("painting$targetType", "drawable", packageName)
if (drawableId != 0) { // getIdentifier找不到资源时返回0
    paintingList[i].setImageResource(drawableId)
} else {
    // 资源不存在时设置默认图或做其他处理
    paintingList[i].setImageResource(R.drawable.default_painting)
}

内容的提问来源于stack exchange,提问作者Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:31:20