如何通过循环将XML资源中的字符串程序化添加至列表?
循环获取XML资源字符串到列表的可行方案
你原来的写法存在语法错误,因为R.string.string<i>这种动态拼接资源名称的方式不成立——Android的资源ID是编译时生成的常量,无法通过这种方式直接调用。下面提供两种可行的实现方式:
方式一:动态查找资源ID(适用于连续命名的字符串)
通过resources.getIdentifier()方法根据名称动态获取资源ID,找不到时终止循环:
val stringList = mutableListOf<String>() var i = 1 while (true) { // 参数:资源名称、资源类型、应用包名 val resId = resources.getIdentifier("string$i", "string", packageName) if (resId == 0) { // 资源不存在时返回0,终止循环 break } stringList.add(getString(resId)) i++ }
方式二:使用字符串数组(更规范稳定)
如果这些字符串是一组相关内容,更推荐在strings.xml中定义<string-array>,避免依赖命名规则:
修改你的strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="my_string_array"> <item>Text 1</item> <item>Text 2</item> <item>Text 3</item> </string-array> </resources>
然后在MainActivity.kt中直接获取并转为可变列表:
val stringList = resources.getStringArray(R.array.my_string_array).toMutableList()
这种方式性能更好,也不需要担心命名不连续或资源名称变更导致的问题。
内容的提问来源于stack exchange,提问作者Balry
相关产品推荐
相关产品推荐

