I have to develop an android view such that i have 2 spinner controls in it, one for state and the second for cities.
My question is, how can I populate the city spinner automatically whenever a state is selected?
What's the logic behind it?
My string.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="spinner_category"></string>
<string-array name="category_state">
<item >kerala</item>
<item >tamil nadu</item>
<item >Andra Pradesh</item>
<item >karnataka</item>
</string-array>
</resources>
My main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:text="Select : "/>
<Spinner android:layout_width="250dip"
android:layout_height="wrap_content"
android:id="@+id/spinner_state"/>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:text="Select : "/>
<Spinner android:layout_width="250dip"
android:layout_height="wrap_content"
android:id="@+id/spinner_state"/>
</LinearLayout>
</LinearLayout>
And my activity.java file:
package com.converter;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class ConverterActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner_s = (Spinner)findViewById(R.id.spinner_state);
ArrayAdapter<CharSequence> category_adapter = ArrayAdapter.createFromResource(
this, R.array.category_array, android.R.layout.simple_spinner_item);
category_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_s.setAdapter(category_adapter);
}
}
Spinners provide a quick way to select one value from a set. In the default state, a spinner shows its currently selected value. Touching the spinner displays a dropdown menu with all other available values, from which the user can select a new one.
Android Spinner is a view similar to the dropdown list which is used to select one option from the list of options. It provides an easy way to select one item from the list of items and it shows a dropdown list of all values when we click on it.
Spinner is used to display progress of those tasks whose total time of completion is unknown. In order to use that, you just need to define it in the xml like this. spinner. setVisibility(View.
Example:
Spinner city=(Spinner)findViewById(R.id.citySpinner);
Spinner state=(Spinner)findViewById(R.id.stateSpinner);
final ArrayList<String> state_options=new ArrayList<String>();
final ArrayList<String> city_options=new ArrayList<String>();
state_options.add("state_1");
state_options.add("state_2");
state_options.add("state_3");
// Here you can also get a cursor and add Strings as options to state_options instead of what i have done
city_options.add("city_1_state_1");
city_options.add("city_2_state_1");
city_options.add("city_3_state_1");
// Here you can also get a cursor and add Strings as options to city_options instead of what i have done
ArrayAdapter<String> cityAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item,city_options);
city.setAdapter(cityAdapter);
ArrayAdapter<String> stateAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item,state_options);
state.setAdapter(stateAdapter);
state.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View view,
int position, long id) {
String stateName=state_options.get(position).toString();
resetCity(stateName);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Now,
public void resetCity(String stateName)
{
city_options.removeAll(city_options);//i haven't checked this.
if(stateName.eqauls("state_1"))
{
city_option.add("city_1_state_1");
city_options.add("city_2_state_1");
city_options.add("city_3_state_1");
//you can also get a cursor and add Strings as options to city_options instead of what i have done
}
else if(stateName.eqauls("state_2"))
{
city_option.add("city_1_state_2");
city_options.add("city_2_state_2");
city_options.add("city_3_state_2");
// you can also get a cursor and add Strings as options to city_options instead of what i have done
}
else
{
city_option.add("city_1_state_3");
city_options.add("city_2_state_3");
city_options.add("city_3_state_3");
//you can also get a cursor and add Strings as options to city_options instead of what i have done
}
ArrayAdapter<String> cityAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item,city_options);
city.setAdapter(cityAdapter);
}
This is the simplest example.You can set your city_options
and state_options
from your database.and then you can use it for populating accoring spinners.
Here is the correct way dear....
I had wrote all the needed states and cities in string_arays....
like
<string-array name="State_array">
<item >s1</item>
<item >s2</item>
<item >s3</item>
<item >s4</item>
</string-array>
//then cities array for each states, like
<string-array name="State1Cities_array">
<item >c11</item>
<item >c12</item>
<item >c15</item>
<item >c13</item>
</string-array>
<string-array name="State2Cities_array">
<item >c1</item>
<item >c2</item>
<item >c5</item>
<item >c3</item>
</string-array>
// and so on for all the states
then in main xml added 2 spinners for both. i belive all of u can do i simple, na?
then i have my main.xml as...
spinner_states_activity = (Spinner)findViewById(R.id.spinner_states_main);
spinner_states_activity.setOnItemSelectedListener(this);
adapter = ArrayAdapter.createFromResource(
this, R.array.state_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(R.layout.myspinner);
// my layout for spinners u can use urs or defalut. k?
spinner_states_activity.setAdapter(adapter);
spinner_cities_activity = (Spinner)findViewById(R.id.spinner_cities_main);
spinner_cities_activity.setOnItemSelectedListener(this);
//and in function onItemSelected
int pos,pos2;
pos = spinner_states_activity.getSelectedItemPosition();
int iden=parent.getId();
if(iden==R.id.spinner_states_main)
{
pos2 = 0;
switch (pos)
{
case 0: unit_adapter= ArrayAdapter.createFromResource(
this, R.array.States1Cities_array, android.R.layout.simple_spinner_item);
break;
case 1: unit_adapter= ArrayAdapter.createFromResource(
this, R.array.States3Cities_array, android.R.layout.simple_spinner_item);
break;
// all the StatesxCities entires....
default:
break;
}
spinner_cities_activity.setAdapter(unit_adapter);
unit_adapter.setDropDownViewResource(R.layout.myspinner);
}
Just check a look and do it by yourself... Hope this will helps u a little...
k dear friends.. Sujith
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With