KKC
KKC

Reputation: 548

Display Data in Spinner,Android

I wanted to display my data into android spinner from database.

I used two spinner.. 2nd spinner should reflect once 1st spinner item is selected, every thing is working fine..data is loaded into the second spinner, but not displaying into 2nd spinner when 2nd spinner item is selected.

Spinner1 = (Spinner)findViewById(R.id.createProfileCitySpinnerId);
Spinner2 = (Spinner)findViewById(R.id.createProfileStateSpinnerId);

//for 1st spinner.....(working)
final List<String> list1 = new ArrayList<String>();

ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, 
                 android.R.layout.simple_spinner_item,list1);
Spinner1.setAdapter(adapter1);

//for second spinner...
final List<String> list2 = new ArrayList<String>();
Spinner1.setOnItemSelectedListener(new OnItemSelectedListener(){

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
    {
         if(//some condition using id)
         {                     
            list2.add(stateCursor.getString(1));                                
         }
   }    
   @Override
   public void onNothingSelected(AdapterView<?> parent)
   {                    
   }    
});

//everything is working data is loading, but not display once item is selected on 2nd spinner
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list2);
stateSpinner.setAdapter(adapter2);

Upvotes: 0

Views: 3767

Answers (2)

William Melani
William Melani

Reputation: 4268

Call adapter2.notifyDataSetChanged();

such as

@Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
    {
         if(//some condition using id)
         {                     
            list2.add(stateCursor.getString(1));
            adapter2.notifyDataSetChanged();                               
         }
   } 

see http://developer.android.com/reference/android/widget/ArrayAdapter.html for more information.

public void notifyDataSetChanged () Since: API Level 1

Notifies the attached observers that the underlying data has been changed and any View reflecting the data set should refresh itself.

Upvotes: 1

gwvatieri
gwvatieri

Reputation: 5173

You need to add the element directly to the adapter (not to list2), the ArrayAdapter keeps its own internal data. Try this code on your onItemSelected:

adapter2.add(stateCursor.getString(1));
adapter2.notifyDataSetChanged();

Upvotes: 1

Related Questions