This is mainly implemented here. The second-level association between provinces and cities. Select a province. Level 2 corresponds to all cities in the province
See the code below;
1. activity
@ Override
Protected void onCreate (Bundle savedInstanceState ){
// TODO Auto-generated method stub
Super. onCreate (savedInstanceState );
SetContentView (R. layout. test_layout );
This. mContext = this;
Map <Integer, List> data = ProvinceDB. getProvince (); // obtain database data
ProvinceList = data. get (1 );
ProvinceData = data. get (0 );
ArrayAdapter provinceAdapter = new ArrayAdapter (mContext, android. R. layout. simple_spinner_item, provinceList );
ProvinceAdapter. setDropDownViewResource (android. R. layout. simple_spinner_dropdown_item); // Style
SpProvince. setAdapter (provinceAdapter );
SpProvince. setOnItemSelectedListener (itemSelectedListener );
}
// Select the province to associate with the target City
Private OnItemSelectedListener itemSelectedListener = new OnItemSelectedListener (){
@ Override
Public void onItemSelected (AdapterView <?> Parent, View view,
Int position, long id ){
Spinner spProvince = (Spinner) parent;
String selProvince = (String) spProvince. getItemAtPosition (position );
ArrayAdapter cityAdapter = null;
Map <String, Integer> data = (Map) provinceData. get (position); // obtain the corresponding province id based on the selected province id and then obtain the city
Int pid = data. get (selProvince); // obtain the province id
List cityList = ProvinceDB. getCityByPid (pid );
CityAdapter = new ArrayAdapter (mContext, android. R. layout. simple_spinner_item, cityList );
CityAdapter
. SetDropDownViewResource (android. R. layout. simple_spinner_dropdown_item );
SpCity. setAdapter (cityAdapter );
SpCity. setOnItemSelectedListener (citySelectedListener );
}
@ Override
Public void onNothingSelected (AdapterView <?> Parent ){
// TODO Auto-generated method stub
}
};
String selectedCity = null;
Private OnItemSelectedListener citySelectedListener = new OnItemSelectedListener (){
@ Override
Public void onItemSelected (AdapterView <?> Parent, View view,
Int position, long id ){
Spinner spCity = (Spinner) parent;
SelectedCity = (String) spCity. getItemAtPosition (position );
}
@ Override
Public void onNothingSelected (AdapterView <?> Parent ){
// TODO Auto-generated method stub
}
};
2. DB-type query data
Public class ProvinceDB {
Public static Map <Integer, List> getProvince (){
String SQL = "select N_PROVID, S_PROVNAME from dict_province ";
SQLiteDatabase db = null;
Cursor c = null;
Map <Integer, List> provinceData = new HashMap <Integer, List> ();
List provinceList = null;
Try {
Db = DatabaseHelper. getDatabase ();
C = db. rawQuery (SQL, null );
List provinceList1 = new ArrayList ();
List provinceList2 = new ArrayList ();
While (c. moveToNext ()){
Map provinceMap = new HashMap ();
ProvinceMap. put (c. getString (1), c. getInt (0 ));
ProvinceList1.add (provinceMap );
ProvinceList2.add (c. getString (1 ));
}
ProvinceData. put (0, provinceList1 );
ProvinceData. put (1, provinceList2 );
} Catch (Exception e ){
E. printStackTrace ();
} Finally {
If (c! = Null ){
C. close ();
}
If (db! = Null ){
Db. close ();
}
}
Return provinceData;
}
Public static List <String> getCityByPid (int id ){
String SQL = "select S_CITYNAME from dict_city where N_PROVID =" + id;
SQLiteDatabase db = null;
Cursor c = null;
List <String> cityList = null;
Try {
Db = DatabaseHelper. getDatabase ();
C = db. rawQuery (SQL, null );
CityList = new ArrayList <String> ();
While (c. moveToNext ()){
CityList. add (c. getString (0 ));
}
} Catch (Exception ex ){
Ex. printStackTrace ();
} Finally {
If (c! = Null ){
C. close ();
}
If (db! = Null ){
Db. close ();
}
}
Return cityList;
}
}
3. test_layout.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: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
<Spinner android: id = "@ + id/sp_bslProvice" android: layout_width = "wrap_content"
Android: layout_height = "wrap_content" android: layout_weight = "1"/>
<Spinner android: id = "@ + id/sp_bslCity" android: layout_width = "wrap_content"
Android: layout_height = "wrap_content" android: layout_weight = "1"/>
</LinearLayout>
From weizhiai12's column