Java Android Spinner上的IndexOutOfBoundException
我正在制作一个将单位转换成不同单位的应用程序。我正在尝试让应用程序在以下步骤中工作Java Android Spinner上的IndexOutOfBoundException,java,android,indexoutofboundsexception,Java,Android,Indexoutofboundsexception,我正在制作一个将单位转换成不同单位的应用程序。我正在尝试让应用程序在以下步骤中工作 使用微调器选择类别(温度、长度等) 根据要选择的类别,其他两个微调器将显示属于每个类别的单位 这是到目前为止的代码 public class UnitConverterFragment extends Fragment implements AdapterView.OnItemSelectedListener { private EditText etValue; private Spinner
public class UnitConverterFragment extends Fragment implements AdapterView.OnItemSelectedListener {
private EditText etValue;
private Spinner spCategory, spFrom, spTo;
private UnitConverter currentConverter, lastConverter;
private ArrayAdapter<String> categoryArrayAdapter;
private ArrayAdapter<CharSequence> unitArrayAdapter;
private String unitFrom, unitTo;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_unitconverter, container, false);
spCategory = (Spinner) view.findViewById(R.id.spCategory);
spFrom = (Spinner) view.findViewById(R.id.spFrom);
spTo = (Spinner) view.findViewById(R.id.spTo);
etValue = (EditText) view.findViewById(R.id.etValue);
spCategory.setOnItemSelectedListener(this);
spFrom.setOnItemSelectedListener(this);
spTo.setOnItemSelectedListener(this);
categoryArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.category));
categoryArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spCategory.setAdapter(categoryArrayAdapter);
categoryArrayAdapter.setNotifyOnChange(true);
unitArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_item);
unitArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spFrom.setAdapter(unitArrayAdapter);
spTo.setAdapter(unitArrayAdapter);
unitArrayAdapter.setNotifyOnChange(true);
currentConverter = new TemperatureConverter();
lastConverter = currentConverter;
return view;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(view.getParent() == spCategory) {
switch(position) {
case 0:
setConverter(new TemperatureConverter());
break;
case 1:
setConverter(new LengthConverter());
break;
case 2:
setConverter(new MassConverter());
break;
case 3:
setConverter(new SpeedConverter());
break;
case 4:
setConverter(new VolumeConverter());
break;
case 5:
setConverter(new AreaConverter());
break;
case 6:
setConverter(new FuelConsumptionConverter());
break;
case 7:
setConverter(new TimeConverter());
break;
case 8:
setConverter(new DigitalStorageConverter());
break;
}
fillFromToSpinner(position);
spFrom.setSelection(0);
spTo.setSelection(0);
**unitFrom = spFrom.getItemAtPosition(0).toString();
unitTo = spTo.getItemAtPosition(0).toString();**
} else if(view.getParent() == spFrom) {
unitFrom = spFrom.getSelectedItem().toString();
} else if(view.getParent() == spTo) {
unitTo = spTo.getSelectedItem().toString();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
private void setConverter(UnitConverter converter) {
lastConverter = currentConverter;
currentConverter = converter;
lastConverter = null;
}
private void fillFromToSpinner(int position) {
switch(position) {
case 0:
fillSpinnerWithTemperatureUnits();
break;
case 1:
fillSpinnerWithLengthUnits();
break;
case 2:
fillSpinnerWithMassUnits();
break;
case 3:
fillSpinnerWithSpeedUnits();
break;
case 4:
fillSpinnerWithVolumeUnits();
break;
case 5:
fillSpinnerWithAreaUnits();
break;
case 6:
fillSpinnerWithFuelConsumptionUnits();
break;
case 7:
fillSpinnerWithTimeUnits();
break;
case 8:
fillSpinnerWithDigitalStorageUnits();
break;
}
}
private void fillSpinnerWithTemperatureUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.temperature, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithLengthUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.length, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithMassUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.mass, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithSpeedUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.speed, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithVolumeUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.volume, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithAreaUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.area, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithFuelConsumptionUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.fuel_consumption, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithTimeUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.time, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
private void fillSpinnerWithDigitalStorageUnits() {
unitArrayAdapter.clear();
unitArrayAdapter.createFromResource(getView().getContext(), R.array.digital_storage, android.R.layout.simple_spinner_item);
unitArrayAdapter.notifyDataSetChanged();
}
}
如果您有任何关于解决此问题的建议,我们将不胜感激。在您的unitArrayAdapter中更新了如果您没有传递任何数组字符串,则将其更改为空
private static final String[] items={"lorem", "ipsum", "dolor","sit", "amet","consectetuer", };
unitArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_item, items);
private static final String[]items={“lorem”、“ipsum”、“dolor”、“sit”、“amet”、“concertetuer”,};
unitArrayAdapter=新的ArrayAdapter(view.getContext(),android.R.layout.simple\u微调器\u项,项);
根据其他人的建议,unitArrayAdapter为空。
那么您希望传递给什么值呢?
如果比较两个适配器,您将看到categoryArrayAdapter中填充了字符串[],而unitArrayAdapter为null 这不起作用,因为代码中的ArrayAdapter变量需要字符串,而getStringArray()方法需要CharSequence。然后为它创建一个单独的字符串数组,就像这个新的ArrayAdapter(view.getContext(),android.R.layout.simple_spinner_item,新字符串[]{“item1”,“item2”,“item3”,“item4”});
private static final String[] items={"lorem", "ipsum", "dolor","sit", "amet","consectetuer", };
unitArrayAdapter = new ArrayAdapter<>(view.getContext(), android.R.layout.simple_spinner_item, items);