William Willi
William Willi

Reputation: 186

Sorting the values in Spinner depending on the condition

I want to make two spinners, the first spinner have the list of states and second spinner contains the list of cities . If i select the particular state from the first spinner then next spinner must show only the cities on the selected state only .

My android code

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    Spinner state  = (Spinner) findViewById(R.id.spinnerState);
    ArrayAdapter<CharSequence> stateadapter = ArrayAdapter.createFromResource(
            this, R.array.item_state, android.R.layout.simple_spinner_item);
    stateadapter.setDropDownViewResource(R.layout.spinner_layout);
    state.setAdapter(stateadapter);




    Spinner city  = (Spinner) findViewById(R.id.spinnerCity);
    ArrayAdapter<CharSequence> cityadapter = ArrayAdapter.createFromResource(
            this, R.array.item_city, android.R.layout.simple_spinner_item);
    cityadapter.setDropDownViewResource(R.layout.spinner_layout);
    city.setAdapter(cityadapter);


 }}

I have created all my for the state and cities.

Upvotes: 1

Views: 78

Answers (2)

Daniel Andujar
Daniel Andujar

Reputation: 1192

There are lots of ways you can achieve this, for example:

ArrayAdapter<CharSequence> stateadapter;
switch(state)
{
    case "Florida": 
       {
           stateadapter = ArrayAdapter.createFromResource(this, R.array.cities_florida, android.R.layout.simple_spinner_item);
       } break;
}

(kinda hardcoded)

The most optimal solution is to define it on an xml file (maybe you can get this somewhere on the internet) and write a class that reads the file and return all the cities on the selected state.

read: https://developer.android.com/training/basics/network-ops/xml.html

Upvotes: 1

Harsh Pandey
Harsh Pandey

Reputation: 831

Add a listener to the Spinner state

state.setOnItemSelectedListener(this);

Implement the listener:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    String selectedState = state.getSelectedItem().toString();

   List<String> citiesInState = new ArrayList<>();
   // add all cities in selectedState to this list using citiesInState.add();
   // this will depend upon how you are storing the cities and states

   ArrayAdapter<String> cityDataAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, citiesInState);
   cityDataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

   city.setAdapter(cityDataAdapter);

}

Upvotes: 0

Related Questions