`
weizhai12
  • 浏览: 145154 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Spinner 从数据库中读取数据并实现2级互动

 
阅读更多
这里主要实现了。省份和城市的二级关联。选择省份。二级对应的就是省份所有的城市

下面看代码;
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();//得到数据库数据
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); // 样式

spProvince.setAdapter(provinceAdapter);
spProvince.setOnItemSelectedListener(itemSelectedListener);

}

// 选择省份 联动 对应城市
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);//根据所选择的得到对应的省份id 然后得到城市
int pid = data.get(selProvince);//得到省份的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类查询数据

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>
分享到:
评论

相关推荐

    android开发入门与实战(下)

    8.5.2 使用ContentProvider读取系统数据 8.5.3 使用ContentProvider操作数据日记本实例 8.6 再学一招——网络存储 8.7 本章小结 第9章 我来“广播”你的“意图”——Intent和Broadcast面对面 9.1 Android应用程序的...

    android开发入门与实战(上)

    8.5.2 使用ContentProvider读取系统数据 8.5.3 使用ContentProvider操作数据日记本实例 8.6 再学一招——网络存储 8.7 本章小结 第9章 我来“广播”你的“意图”——Intent和Broadcast面对面 9.1 Android应用程序的...

    《Google Android开发入门与实战》.pdf

    8.5.2 使用contentprovider读取系统数据 156 8.5.3 使用contentprovider操作数据日记本实例 159 8.6 再学一招——网络存储 171 8.7 本章小结 173 第9章 我来“广播”你的“意图”——intent和broadcast...

    Google Android开发入门与实战的代码

    8.5.2 使用ContentProvider读取系统数据 156 8.5.3 使用ContentProvider操作数据日记本实例 159 8.6 再学一招——网络存储 171 8.7 本章小结 173 第9章 我来“广播”你的“意图”——Intent和Broadcast...

    Google.Android开发入门与实战

    8.5.2 使用ContentProvider读取系统数据 8.5.3 使用ContentProvider操作数据日记本实例 8.6 再学一招——网络存储 8.7 本章小结 第9章 我来“广播”你的“意图”——Intent和Broadcast面对面 9.1 Android应用程序的...

    Google Android SDK开发范例大全(第3版) 1/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

    Google Android SDK开发范例大全(第3版) 4/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

    Google Android SDK开发范例大全(第3版) 3/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

    Google Android SDK开发范例大全(第3版) 5/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

Global site tag (gtag.js) - Google Analytics