0

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;
}
Community
  • 1
  • 1
Mac
  • 375
  • 6
  • 10
  • 17

0 Answers0