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
相关产品推荐
相关产品推荐

