Android开发:如何为String Array中的项配对关联编码?
解决Spinner选项与编码配对的优雅方案(避免大量if/else)
能不能在strings.xml中配置配对关系?
可以,但Android原生string-array不支持直接存储键值对,我们可以用两个平行的字符串数组实现:一个存动物名称,一个存对应编码,两者索引严格一一对应即可。
具体实现步骤
- 修改strings.xml,添加编码数组
在现有Animals数组下方新增编码数组,确保顺序和Animals完全匹配:
<string-array name="Animals"> <item>Dog</item> <item>Cat</item> <item>Mouse</item> <!-- 其他动物项 --> </string-array> <string-array name="AnimalCodes"> <item>111</item> <item>222</item> <item>333</item> <!-- 对应上面的编码,顺序必须和Animals数组一致 --> </string-array>
- 代码中关联Spinner与编码
通过Spinner选中项的索引,直接从编码数组中取值,完全不需要if/else:
// 从资源中加载两个数组 val animalNames = resources.getStringArray(R.array.Animals) val animalCodes = resources.getStringArray(R.array.AnimalCodes) // 给Spinner设置适配器 val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, animalNames) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) binding.spinnerAnimals.adapter = adapter // 监听选中事件,获取配对的动物名称和编码 binding.spinnerAnimals.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { val selectedAnimal = animalNames[position] val selectedCode = animalCodes[position] // 将两个值存入你的目标变量即可 } override fun onNothingSelected(parent: AdapterView<*>?) { // 可选:处理未选中的场景 } }
额外优化思路
如果编码固定且不需要多语言适配,也可以在代码中初始化Map来存储映射关系:
val animalCodeMap = mapOf( "Dog" to "111", "Cat" to "222", "Mouse" to "333" ) // 选中时直接通过动物名称取编码 val selectedCode = animalCodeMap[selectedAnimal]
但优先推荐平行数组方案,既能通过xml统一管理,又能配合Android多语言适配能力,维护更省心。
内容的提问来源于stack exchange,提问作者Altohombre
相关产品推荐
相关产品推荐

