android完整开发省市县三级联选
时间: 2023-10-04 11:08:42 浏览: 46
实现省市县三级联动的方法有很多种,以下是一种常用的实现方式:
1. 创建三个Spinner控件,分别用来显示省、市、县的名称。
2. 创建三个List集合,分别用来存储省、市、县的数据。
3. 在Activity的onCreate()方法中,初始化省级数据,将其加载到省级List集合中。同时设置省级Spinner的适配器,并设置选择监听器。
4. 当省级Spinner的选择项发生改变时,根据所选省份的名称加载该省份的市级数据,并将其加载到市级List集合中。同时设置市级Spinner的适配器,并设置选择监听器。
5. 当市级Spinner的选择项发生改变时,根据所选城市的名称加载该城市的县级数据,并将其加载到县级List集合中。同时设置县级Spinner的适配器,并设置选择监听器。
6. 最后,在选择县级Spinner的最后一项后,即可得到完整的省市县三级联动数据。
具体实现可以参考以下代码:
```
public class MainActivity extends AppCompatActivity {
private Spinner mProvinceSpinner;
private Spinner mCitySpinner;
private Spinner mCountySpinner;
private List<String> mProvinceList = new ArrayList<>();
private List<String> mCityList = new ArrayList<>();
private List<String> mCountyList = new ArrayList<>();
private ArrayAdapter<String> mProvinceAdapter;
private ArrayAdapter<String> mCityAdapter;
private ArrayAdapter<String> mCountyAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mProvinceSpinner = findViewById(R.id.province_spinner);
mCitySpinner = findViewById(R.id.city_spinner);
mCountySpinner = findViewById(R.id.county_spinner);
// 初始化省级数据
initProvinceData();
// 设置省级Spinner的适配器和选择监听器
mProvinceAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, mProvinceList);
mProvinceSpinner.setAdapter(mProvinceAdapter);
mProvinceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// 根据所选省份的名称加载该省份的市级数据
String provinceName = mProvinceList.get(position);
initCityData(provinceName);
// 设置市级Spinner的适配器和选择监听器
mCityAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_item, mCityList);
mCitySpinner.setAdapter(mCityAdapter);
mCitySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// 根据所选城市的名称加载该城市的县级数据
String cityName = mCityList.get(position);
initCountyData(cityName);
// 设置县级Spinner的适配器
mCountyAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_item, mCountyList);
mCountySpinner.setAdapter(mCountyAdapter);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
// 初始化省级数据
private void initProvinceData() {
mProvinceList.add("北京市");
mProvinceList.add("天津市");
mProvinceList.add("河北省");
mProvinceList.add("山西省");
mProvinceList.add("内蒙古自治区");
}
// 根据省份名称初始化市级数据
private void initCityData(String provinceName) {
mCityList.clear();
if ("北京市".equals(provinceName)) {
mCityList.add("北京市");
} else if ("天津市".equals(provinceName)) {
mCityList.add("天津市");
} else if ("河北省".equals(provinceName)) {
mCityList.add("石家庄市");
mCityList.add("唐山市");
mCityList.add("秦皇岛市");
} else if ("山西省".equals(provinceName)) {
mCityList.add("太原市");
mCityList.add("大同市");
mCityList.add("阳泉市");
} else if ("内蒙古自治区".equals(provinceName)) {
mCityList.add("呼和浩特市");
mCityList.add("包头市");
mCityList.add("赤峰市");
}
}
// 根据城市名称初始化县级数据
private void initCountyData(String cityName) {
mCountyList.clear();
if ("石家庄市".equals(cityName)) {
mCountyList.add("长安区");
mCountyList.add("桥西区");
} else if ("唐山市".equals(cityName)) {
mCountyList.add("路北区");
mCountyList.add("路南区");
} else if ("秦皇岛市".equals(cityName)) {
mCountyList.add("海港区");
mCountyList.add("山海关区");
} else if ("太原市".equals(cityName)) {
mCountyList.add("小店区");
mCountyList.add("迎泽区");
} else if ("大同市".equals(cityName)) {
mCountyList.add("城区");
mCountyList.add("矿区");
} else if ("阳泉市".equals(cityName)) {
mCountyList.add("城区");
mCountyList.add("矿区");
} else if ("呼和浩特市".equals(cityName)) {
mCountyList.add("新城区");
mCountyList.add("回民区");
} else if ("包头市".equals(cityName)) {
mCountyList.add("东河区");
mCountyList.add("昆都仑区");
} else if ("赤峰市".equals(cityName)) {
mCountyList.add("红山区");
mCountyList.add("元宝山区");
}
}
}
```