我们在上一篇中介绍了如何获取省市区的数据,现在我们来介绍使用spinner控件来实现省市区3级联动的例子。

下面的代码是我在开发项目时实现的。

首先我们展示下布局文件中的3个spinner

<LinearLayout android:layout_height="40dip"
android:layout_width="fill_parent"
android:id="@+id/LinearLayoutArea" android:orientation="horizontal">
<Spinner android:id="@+id/spprovince" android:layout_width="100dip"
android:layout_height="wrap_content">
</Spinner>
<Spinner android:id="@+id/spcity" android:layout_width="100dip"
android:layout_height="wrap_content">
</Spinner>
<Spinner android:id="@+id/sparea" android:layout_width="100dip"
android:layout_height="wrap_content">
</Spinner>
</LinearLayout>

接下来是对这些spinner控件赋值绑定事件的代码:

// 从数据库中读取省市区的数据
// 初始化省下拉框
private void InitialProvince() {
try {
Map<Integer, List> data = AddressUtil.getProvince(file);
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);
} catch (Exception e) {
Log.d("WineStock", "InitialProvince:" + e.getMessage());
}
}

String selectedProvince = "";// 下拉框中选择的省
// 省下拉框事件
private OnItemSelectedListener itemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
try {
Spinner spProvince = (Spinner) parent;
selectedProvince = (String) spProvince
.getItemAtPosition(position);
ArrayAdapter cityAdapter = null;
Map<String, Integer> data = (Map) provinceData.get(position);// 根据所选择的得到对应的省份id
// 然后得到城市
int pid = data.get(selectedProvince);// 得到省份的id
Map<Integer, List> citymap = AddressUtil
.getCityByPid(pid, file);
cityList = citymap.get(1);
cityData = citymap.get(0);
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);
} catch (Exception e) {
Log.d("WineStock", "Select Province error:" + e.getMessage());
}
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};

String selectedCity = "";// 下拉框中选择的市
// 市下拉框事件
private OnItemSelectedListener citySelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
try {
Spinner spCity = (Spinner) parent;
selectedCity = (String) spCity.getItemAtPosition(position);
ArrayAdapter areaAdapter = null;
Map<String, Integer> data = (Map) cityData.get(position);// 根据所选择的得到对应的省份id
// 然后得到城市
int pid = data.get(selectedCity);// 得到城市的id
List<String> listArea = AddressUtil.getAreaByPid(pid, file);
areaAdapter = new ArrayAdapter(mContext,
android.R.layout.simple_spinner_item, listArea);
areaAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sparea.setAdapter(areaAdapter);
sparea.setOnItemSelectedListener(areaSelectedListener);
} catch (Exception e) {
Log.d("WineStock", "Select City error:" + e.getMessage());
}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};

String selectedArea = "";// 下拉框中选择的区
// 区下拉框事件
private OnItemSelectedListener areaSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
try {
Spinner spArea = (Spinner) parent;
selectedArea = (String) spArea.getItemAtPosition(position);
if (selectedProvince != "" && selectedCity != ""
&& selectedArea != "") {
String strAdd = selectedProvince + selectedCity
+ selectedArea;
etaddress.setText(strAdd);
}
} catch (Exception e) {
Log.d("WineStock", "Select Area error:" + e.getMessage());
}
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};





更多相关文章

  1. 对android中事件的分发的理解
  2. Android处理ListView的条目长按事件
  3. Android监听底层事件的机制总结
  4. Android - ListActivity 单击事件的响应
  5. 总结系列-触摸屏事件的传递机制
  6. Android TouchEvent事件传递机制初识
  7. Android 触控事件解析 - Mastering The Android Touch System 笔

随机推荐

  1. Android WebView加载本地Html文件
  2. Android seekbar 滑动时上方显示进度
  3. 【Android】高德地图2DMap,隐藏“高德地图
  4. android studio 3.0 修改release生成的ap
  5. Android BaseAdapter使用及listview优化
  6. android 登录前检查网络状态
  7. Android Studio批量打包
  8. Android再按一次退出程序实现方法
  9. Android启动流程简析(一)
  10. android中.classpath和.project作用