I am pulling data from a database and populating a series of EditTexts and Spinners with the data.
I can fill the EditTexts without issue but the spinners are resetting to their default values.
I have tried using setSelection()
but it doesn't work.
Here is my code:
spinner = (Spinner) rootView.findViewById(R.id.vehicle);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_item,
new String[] {"Car", "Bus", "Plane", "Bicycle"});
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.getOnItemSelectedListener();
spinner = (Spinner) rootView.findViewById(R.id.category);
ArrayAdapter<String> adapterCategory = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_item,
new String[] {"Vacation", "Commute", "Leisure", "Shopping"});
adapterCategory.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapterCategory);
spinner.getOnItemSelectedListener();
}
public void updateTripView(String position) {
Cursor cursor = ((TripListActivity)getActivity()).dbHelper.fetchTripById(position);
if (cursor != null) {
try {
String tripId =
cursor.getString(cursor.getColumnIndexOrThrow("tripId"));
int tripCategory =
cursor.getInt(cursor.getColumnIndexOrThrow("category"));
int tripVehicle =
cursor.getInt(cursor.getColumnIndexOrThrow("vehicle"));
String tripDistance =
cursor.getString(cursor.getColumnIndexOrThrow("distance"));
String tripDate =
cursor.getString(cursor.getColumnIndexOrThrow("date"));
String tripNote =
cursor.getString(cursor.getColumnIndexOrThrow("note"));
((TextView) rootView.findViewById(R.id.tripId)).setText(tripId);
((Spinner) rootView.findViewById(R.id.category)).setSelection(tripCategory);
((Spinner) rootView.findViewById(R.id.vehicle)).setSelection(tripVehicle);
((TextView) rootView.findViewById(R.id.distance)).setText(tripDistance);
((TextView) rootView.findViewById(R.id.date)).setText(tripDate);
((TextView) rootView.findViewById(R.id.note)).setText(tripNote);
} catch (IllegalArgumentException e) {
Log.d(TAG, "IllegalArgumentException");
}
}
mCurrentPosition = position;
}
EDIT: I found a solution based on the answers here: How to set selected item of Spinner by value, not by position?
//get index value of spinner
private int getIndex(Spinner spinner, String myString)
{
int index = 0;
for (int i=0;i<spinner.getCount();i++){
if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(myString)){
index = i;
break;
}
}
return index;
}
And my amended updateTrip
class:
public void updateTripView(String position) {
Cursor cursor = ((TripListActivity)getActivity()).dbHelper.fetchTripById(position);
if (cursor != null) {
try {
String tripId =
cursor.getString(cursor.getColumnIndexOrThrow("tripId"));
String tripCategory =
cursor.getString(cursor.getColumnIndexOrThrow("category"));
String tripVehicle =
cursor.getString(cursor.getColumnIndexOrThrow("vehicle"));
String tripDistance =
cursor.getString(cursor.getColumnIndexOrThrow("distance"));
String tripDate =
cursor.getString(cursor.getColumnIndexOrThrow("date"));
String tripNote =
cursor.getString(cursor.getColumnIndexOrThrow("note"));
spinner = ((Spinner) rootView.findViewById(R.id.category));
ArrayAdapter<String> adapterCategory = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_item,
new String[] {"Vacation", "Commute", "Leisure", "Shopping"});
spinner.setAdapter(adapterCategory);
((TextView) rootView.findViewById(R.id.tripId)).setText(tripId);
//set spinner value based on index
spinner.setSelection(getIndex(spinner, tripCategory));
spinner1 = ((Spinner) rootView.findViewById(R.id.vehicle));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_item,
new String[] {"Car", "Bus", "Plane", "Bicycle"});
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter);
//set spinner value based on index
spinner1.setSelection(getIndex(spinner1, tripVehicle));
((TextView) rootView.findViewById(R.id.distance)).setText(tripDistance);
((TextView) rootView.findViewById(R.id.date)).setText(tripDate);
((TextView) rootView.findViewById(R.id.note)).setText(tripNote);
} catch (IllegalArgumentException e) {
Log.d(TAG, "IllegalArgumentException");
}
}
mCurrentPosition = position;
}