Android开发如何批量读取strings.xml中多个字符串资源存入列表
Android批量读取strings.xml字符串资源的实现方案
你的代码无法运行有两个核心问题:
R.string.xxx是编译期生成的Int类型常量,无法直接通过字符串名称拼接拿到对应的ID- 循环内部重复初始化
specArray,会清空之前已经添加的内容,逻辑完全错误
你可以通过以下两种方式实现需求:
方案1:动态获取资源ID(适合需要按规则拼接资源名的场景)
用Android系统提供的resources.getIdentifier方法,可以通过资源名的字符串、资源类型、应用包名动态获取到对应的资源ID,再读取字符串即可,示例代码如下:
val specArray = mutableListOf<String>() // Activity中可以直接获取当前应用的包名 val packageName = packageName // 按你需要的数量遍历,比如你的资源名是specC1、specC2...specC36 for (index in 1..36) { val resName = "specC$index" // 参数顺序:资源名称、资源类型、应用包名,找不到资源会返回0 val resId = resources.getIdentifier(resName, "string", packageName) // 判空避免资源不存在导致崩溃 if (resId != 0) { specArray.add(getString(resId)) } }
注意:该方法是运行时查找资源,性能略低于直接引用R常量,资源名拼写错误不会在编译期报错,需要做好校验
方案2:使用字符串数组资源(官方推荐,更稳定)
Android原生支持批量存储字符串的string-array资源,是官方推荐的同类型批量字符串管理方案,编译期即可校验资源合法性,性能更高。
- 首先在
res/values/strings.xml中定义数组:
<string-array name="spec_array"> <item>@string/string1</item> <item>@string/string2</item> <item>@string/string3</item> <item>@string/string4</item> <!-- 所有需要的字符串按顺序加到这里即可 --> </string-array>
- Activity中直接读取转成可变列表:
val specArray = resources.getStringArray(R.array.spec_array).toMutableList()
优势:不需要处理动态查找的异常,后续新增/删除资源只要修改XML数组即可,代码不需要改动
内容的提问来源于stack exchange,提问作者Baslim734
相关产品推荐
相关产品推荐

