这里主要实现了。省份和城市的二级关联。选择省份。二级对应的就是省份所有的城市
下面看代码;
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>
分享到:
相关推荐
应用启动时,从SharedPreferences读取保存的值,并设置Spinner的默认选中项: ```java String savedOption = preferences.getString("selected_spinner_option", ""); if (!savedOption.isEmpty()) { for (int...
在这个例子中,我们有一个名为`initDate`的类,用于封装从数据库中读取的数据,包括Bitmap图片、内容字符串和时间字符串。 ```java public class initDate { public Bitmap bitmap; public String content; ...
综上所述,实现"Spinner二级联动下拉菜单"涉及到了Android UI设计、数据适配、事件监听、数据加载、异步处理等多个方面,是Android开发中的一个综合实践。在实际开发中,应确保代码的可读性、可维护性,并考虑性能...
- 当一级省份选择改变时,获取选定的省份,然后根据该省份查找对应的市列表,并更新二级城市Spinner的数据源。 5. **更新二级城市Spinner** - 调用二级Spinner的`setAdapter()`方法,传入新的ArrayAdapter,数据...
在Android开发中,"spinner,list数据刷新"是一个关键的话题,涉及到UI交互和数据管理的核心技术。Spinner是Android SDK提供的一种下拉选择控件,而List则通常指的是ListView或RecyclerView,它们是显示大量数据的...
3. **更新第二个Spinner**:在`onItemSelected()`方法中,根据用户选择的国家,你可以从数据库、网络或本地资源中获取对应的 city 数据,并创建一个新的ArrayAdapter,然后将其设置给第二个Spinner。 ```java List...
本篇文章将详细探讨Android Spinner的使用、基本概念、API以及如何在实际项目中实现一个Spinner案例。 **Spinner的基本概念** Spinner是一个UI组件,它的外观类似一个单行输入框,但点击后会展开一个下拉列表,供...
2. 初始化Spinner:在布局文件中添加Spinner控件,并设置它们的id以便在代码中引用。 3. 设置适配器:为每个Spinner创建适配器,并填充数据。对于二级联动,需要两个适配器,一个用于省份,另一个用于城市。适配器...
比如,我们可以从网络或者数据库获取数据,然后动态添加到Spinner: ```java // 假设我们从网络获取了一个新的数据列表 List<String> newData = getNewDataFromServer(); // 清除现有数据 adapter.clear(); // ...
在`onItemSelected`方法中,我们可以根据一级选项的值(`selectedValue`)从数据库或JSON文件中查询相应的二级数据,然后为第二个Spinner创建新的ArrayAdapter并设置数据。例如: ```java // 假设我们有一个获取二...
在"android spinner 三级联动"这个话题中,我们将探讨如何利用Spinner控件来实现全国省市县(区)的三级联动效果。这种效果常见于地址选择、地区筛选等场景,能够帮助用户快速定位到特定的地理位置。 首先,我们...
【安卓 Spinner 实现省市级联】是Android开发中常见的需求,用于在应用程序中创建一个下拉选择组件,展示省、市、区等地理层级的数据。Spinner控件在Android中广泛用于实现有限选项的选择,通常与Adapter配合使用,...
创建一个三级联动Spinner的基本步骤包括创建适配器,设置数据,监听选择事件,并在事件中更新其他Spinner的适配器数据。这里给出一个简化版的代码片段: ```java Spinner level1Spinner, level2Spinner, level3...
"spinner三级联动"是指在一个应用中,通过三个Spinner控件实现相互关联的选择效果,当用户在第一个Spinner中选择一个省份时,第二个Spinner会自动更新为与该省份相关的城市列表,接着在第二个Spinner选定城市后,第...
在实际开发中,我们可能会遇到更复杂的需求,例如从数据库读取数据到Spinner。这时,可以使用`SimpleCursorAdapter`配合SQLite数据库,通过查询操作获取数据,再将Cursor对象传入适配器。同时,要记得在Activity的...
本项目“Android高级应用源码-Spinner多级联动.rar”显然关注的是如何实现Spinner的多级联动效果,这是一种在Android应用中处理层次结构数据的常见方式,例如省份-城市-区县的选择。现在,我们将深入探讨Spinner的...
这通常通过ArrayAdapter完成,ArrayAdapter可以从一个数组或者列表中获取数据并填充到Spinner中。对于计算器,我们可以定义一个包含加、减、乘、除等运算符的字符串数组: ```java String[] operators = {"+", "-",...
在Java或Kotlin代码中,我们可以预先加载这些数据到内存中,或者从网络、本地数据库等获取。 接下来,我们需要实现联动效果。当用户在Spinner中选择一个省后,第二个Spinner会显示该省的所有城市;选择城市后,第三...
- **数据加载**:根据用户选择的级别,从数据库或网络加载相应级别的数据,并填充到下一个Spinner。 - **UI布局**:在XML布局文件中添加三个Spinner,并设置适配器。 4. **readme.md** 这个文件可能是对整个项目...
ArrayAdapter可以从数组或列表中填充数据,而SimpleCursorAdapter则适用于从SQLite数据库中获取数据。在XML布局文件中,我们可以添加Spinner并设置其适配器: ```xml <Spinner android:id="@+id/spinner" android...