Android Java如何将Item_sumber数组转为String数组适配Spinner控件
报错根因
你的Arrays.copyOf()方法只能对同类型或存在继承关系的数组做拷贝,无法直接将Item_sumber类型的数组转换为String类型数组,类型不匹配所以触发了ArrayStoreException。
适配Spinner的两种实现方案
方案1:提取显示字段生成String适配器
遍历Item_sumber数组,提取要显示的nama_sumber字段组成字符串列表,再绑定到Spinner,同时可以直接保留原始对象列表方便取值:
Formdata jsonResponse = response.body(); Item_sumber[] sumberArr = jsonResponse.getSumber(); List<String> sumberNameList = new ArrayList<>(); final List<Item_sumber> sumberDataList = new ArrayList<>(); if (sumberArr != null) { for (Item_sumber item : sumberArr) { sumberNameList.add(item.getNama_sumber()); sumberDataList.add(item); } } ArrayAdapter<String> adapter_sumber = new ArrayAdapter<>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, sumberNameList); dropdown_sumber.setAdapter(adapter_sumber); // 选中监听直接取对应对象的ID,避免下标计算错误 dropdown_sumber.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { id_sumber = sumberDataList.get(i).getId(); } @Override public void onNothingSelected(AdapterView<?> parent) { id_sumber = ""; } });
方案2:自定义适配Item_sumber类型的ArrayAdapter(更推荐)
直接让适配器适配Item_sumber对象,重写显示方法绑定文本,无需额外做数组转换,后续要获取选中项的任意字段都更灵活:
Formdata jsonResponse = response.body(); Item_sumber[] sumberArr = jsonResponse.getSumber(); if (sumberArr == null) { return; } ArrayAdapter<Item_sumber> adapter = new ArrayAdapter<Item_sumber>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, sumberArr) { @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) super.getView(position, convertView, parent); view.setText(getItem(position).getNama_sumber()); return view; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) super.getDropDownView(position, convertView, parent); view.setText(getItem(position).getNama_sumber()); return view; } }; dropdown_sumber.setAdapter(adapter); // 选中时直接拿到完整的Item_sumber对象 dropdown_sumber.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { Item_sumber selectedItem = (Item_sumber) adapterView.getSelectedItem(); id_sumber = selectedItem.getId(); } @Override public void onNothingSelected(AdapterView<?> parent) { } });
内容的提问来源于stack exchange,提问作者Alifa Al Farizi
相关产品推荐
相关产品推荐

