You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:24:32