如何为string.xml中Spinner的字符串数组项添加对应值
Android Spinner 为字符串数组条目绑定对应值的解决方案
首先明确:你期望的给<string-array>的<item>添加value属性的写法不可行,因为Android系统的<string-array>仅支持纯文本的item,自定义的value属性不会被系统识别,也无法通过API获取。
下面提供两种常用的实现方式,来实现“显示文本+对应值”的绑定需求:
方式一:使用平行数组(简单快捷)
在strings.xml中定义两个对应关系的数组,一个存显示文本,一个存对应的值,通过下标一一对应:
<string-array name="hubungan_labels"> <item>Choice</item> <item>CHILD</item> <item>PARENT</item> <item>HUSBAND</item> <item>WIFE</item> </string-array> <string-array name="hubungan_values"> <item>1</item> <item>2</item> <item>3</item> <item>4</item> <item>5</item> </string-array>
在代码中使用时,先获取两个数组,然后通过Spinner选中的position匹配对应的值:
// 获取数组资源 String[] labels = getResources().getStringArray(R.array.hubungan_labels); String[] values = getResources().getStringArray(R.array.hubungan_values); // 初始化Spinner(基础代码) Spinner spinner = findViewById(R.id.your_spinner_id); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, labels); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); // 监听选中事件,获取对应值 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String selectedLabel = labels[position]; String selectedValue = values[position]; // 这里处理选中后的逻辑 } @Override public void onNothingSelected(AdapterView<?> parent) {} });
方式二:自定义实体类+Adapter(更灵活)
如果后续需要扩展更多属性,或者要避免数组下标出错的问题,可以创建一个实体类封装显示文本和对应值,再用自定义Adapter绑定:
1. 创建实体类
public class RelationshipItem { private String label; private int value; public RelationshipItem(String label, int value) { this.label = label; this.value = value; } // 获取显示文本 public String getLabel() { return label; } // 获取对应值 public int getValue() { return value; } // Spinner默认显示toString的返回值,所以重写这个方法 @Override public String toString() { return label; } }
2. 在代码中初始化数据并绑定Spinner
// 初始化数据列表 List<RelationshipItem> relationshipList = new ArrayList<>(); relationshipList.add(new RelationshipItem("Choice", 1)); relationshipList.add(new RelationshipItem("CHILD", 2)); relationshipList.add(new RelationshipItem("PARENT", 3)); relationshipList.add(new RelationshipItem("HUSBAND", 4)); relationshipList.add(new RelationshipItem("WIFE", 5)); // 绑定Adapter到Spinner Spinner spinner = findViewById(R.id.your_spinner_id); ArrayAdapter<RelationshipItem> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, relationshipList); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); // 监听选中事件,直接获取实体类的属性 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { RelationshipItem selectedItem = (RelationshipItem) parent.getSelectedItem(); String selectedLabel = selectedItem.getLabel(); int selectedValue = selectedItem.getValue(); // 处理选中逻辑 } @Override public void onNothingSelected(AdapterView<?> parent) {} });
内容的提问来源于stack exchange,提问作者tantina devega
相关产品推荐
相关产品推荐

