Due to how the Android SDK and Java are setup it isn’t really a simple task to link up an array with a spinner control. I’ll go over some basics I just learned of the process. In this example I setup a setting control that will allow the user to select from a list of values. The spinner control will be initialized by the global setting value (from a black box object in this example), and a control listener will be defined that allows the user to change the global setting.
To define a list of string values that can be loaded into android controls you would do something like this. You can add an arrays.xml file to your project (in the /res/values directory):
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="settinglist01"> <item>1</item> <item>2</item> <item>3</item> <item>4</item> <item>5</item> </string-array> </resources>
To make a spinner control, add this to an activity layout xml file:
<Spinner android:id="@+id/settingList01Spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:prompt="@string/misctextfromstringsxmlfile" android:entries="@array/settinglist01" />
The misctextfromstringsxmlfile item would be a string value in your strings.xml file. This is displayed when the user selects the spinner control to change the value:
<string name="misctextfromstringsxmlfile">Spinner Example Items:</string>
In your Activity onCreate() function or similar you can setup the spinner and related code to change values:
String[] settingsSpinner01Values; resourcePointer = getResources(); settingsSpinner01Values = resourcePointer.getStringArray(R.array.settinglist01); Spinner settings01Spinner = (Spinner) this.findViewById(R.id.settingList01Spinner); settings01Spinner.setSelection(findInStringArray(settingsSpinner01Values, settingsObject.getSettingValue(Settings.setting01))); settings01Spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onNothingSelected(AdapterView<?> parentView) {} @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String selectedValue = stationCountSpinnerValues[position]; if(selectedValue != "") { settingsObject.setSettingValue(Settings.setting01, selectedValue); } } }); /** * a simple sequential search function to find values in a string array * * @param arrayToSearch * @param valueToFind * @return -1 or the index of the item found */ private int findInStringArray(String[] arrayToSearch, String valueToFind) { boolean searching = true; int counter = 0; int returnValue = -1; //do a simple sequential search while(searching == true && counter < arrayToSearch.length) { //look for the needle in the hay-stack if(valueToFind.equalsIgnoreCase(arrayToSearch[counter])) { //we found the value we are looking for so return the related index searching = false; returnValue = counter; } else { counter++; } } return returnValue; }
settingsObject.getSettingValue(Settings.setting01) is a function of your design that will return a setting value or whatever else your are doing. In my example it is just a class that would save global setting values. The same thing goes for settingsObject.setSettingValue(Settings.setting01, selectedValue); but the reverse process to save a new spinner value that was selected by the user.
We create a OnItemSelectedListener() instance that will be called when the user selects a value. In our code, we just set the black box setting object with the new value.