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

Android开发:使用Double数组创建Spinner遇类型错误求助

解决Spinner使用Double数组的类型错误问题

嗨,我来帮你搞定这个问题~你遇到的java.lang.Double[], required int错误,核心原因是用错了ArrayAdapter.createFromResource()这个方法!

错误原因说明

createFromResource()的第二个参数要求传入int类型的资源ID(比如R.array.your_array_name这种从XML资源文件里定义的数组ID),而不是直接传一个Java数组对象。你直接把Double[]数组传进去,类型自然不匹配啦。

两种可行的解决方法

因为你需要显示小数,完全不用转成int数组,下面两种方法都能直接用Double数据:

方法1:直接用ArrayAdapter构造函数(推荐新手用)

跳过createFromResource(),直接用ArrayAdapter的构造方法来绑定Double数组,它会自动把Double转成字符串显示在Spinner里:

// 你的Double数组
Double[] FULL = new Double[]{2.25, 2.5, 2.8};

// 直接创建适配器,传入上下文、布局、数组
ArrayAdapter<Double> adapter = new ArrayAdapter<>(this, android.R.layout.simple_selectable_list_item, FULL);

// 给Spinner设置适配器
yourSpinner.setAdapter(adapter);

如果需要自定义显示格式(比如强制保留两位小数),可以先把Double转成格式化后的字符串数组:

Double[] FULL = new Double[]{2.25, 2.5, 2.8};
String[] fullStrings = new String[FULL.length];
for (int i = 0; i < FULL.length; i++) {
    // 格式化保留两位小数
    fullStrings[i] = String.format("%.2f", FULL[i]);
}

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_selectable_list_item, fullStrings);
yourSpinner.setAdapter(adapter);

方法2:把数组放到XML资源文件里

如果你习惯用资源文件管理数组,可以这么做:

  1. 在res/values目录下创建arrays.xml文件(如果没有的话)
  2. 定义字符串数组(把Double转成字符串):
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="full_values">
        <item>2.25</item>
        <item>2.5</item>
        <item>2.8</item>
    </string-array>
</resources>
  1. 然后用createFromResource()加载这个资源:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this,
        R.array.full_values, // 这里是资源ID,int类型
        android.R.layout.simple_selectable_list_item
);
yourSpinner.setAdapter(adapter);

获取选中值的示例

不管用哪种方法,获取选中的Double值可以参考这个代码:

yourSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // 如果用的是Double数组的适配器
        Double selectedValue = (Double) parent.getItemAtPosition(position);
        // 如果用的是字符串数组的适配器
        // Double selectedValue = Double.parseDouble((String) parent.getItemAtPosition(position));
        
        // 这里处理选中的值
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // 可选:处理未选中的情况
    }
});

内容的提问来源于stack exchange,提问作者Mohammedis271

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:37