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资源文件里
如果你习惯用资源文件管理数组,可以这么做:
- 在
res/values目录下创建arrays.xml文件(如果没有的话) - 定义字符串数组(把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>
- 然后用
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
相关产品推荐
相关产品推荐

