原文地址 :??
github地址 :四级联动(省、市、区、镇)的地区选择器
json城市数据 :?json城市数据,最新更新时间2021/10/31
在此基础上 做了相应的更改
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
private List<RegionBean> provinceBeans;//省份数据
private String mProvince;//省
private String mCity;//市
private String mZone;//区
private String mArea;//街道
private RegionSelectDialog regionSelectDialog;//弹窗
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//id
final TextView tv_region=findViewById(R.id.tv_region);
//点击弹出地址选择
tv_region.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//显示
regionSelectDialog.showDialog();
}
});
//初始化时,传入RegionLevel设置三级联动or四级联动)
regionSelectDialog = new RegionSelectDialog(this, RegionLevel.LEVEL_FOUR);
// regionSelectDialog.setLevel();
//json数据 省
String province_data_json = JsonParser.getJson(this, "province.json");
//json转换list
List<Map<String, Object>> province_maps = getlistForJson(province_data_json);
//获取省级数据
provinceBeans = new ArrayList<>();
for (int i = 0; i < province_maps.size(); i++) {
RegionBean provinceBean=new RegionBean(""+province_maps.get(i).get("code"),""+province_maps.get(i).get("name"));
provinceBeans.add(provinceBean);
}
//此步骤必须,否则无法显示
regionSelectDialog.setOnRegionDataSetListenr(new OnRegionDataSetListener() {
//必须有返回值
@Override
public List<RegionBean> setProvinceList() {
return provinceBeans;
}
//必须有返回值
@Override
public List<RegionBean> setOnProvinceSelected(RegionBean regionBean) {
//接收选中的省份
mProvince = regionBean.getName();
//获取当前省份的id
String provinceId = regionBean.getId();
//json数据 市
String city_json = JsonParser.getJson(MainActivity.this, "city.json");
//json转换list
List<Map<String, Object>> city_maps = getlistForJson(city_json);
//返回显示的城市
List<RegionBean> cityBeans=new ArrayList<>();
for (int i = 0; i < city_maps.size(); i++) {
RegionBean cityBean=new RegionBean(""+city_maps.get(i).get("code"),""+city_maps.get(i).get("name"));
//当前省份下的城市
if (provinceId.equals(city_maps.get(i).get("provinceCode"))){
cityBeans.add(cityBean);
}
}
return cityBeans;
}
//必须有返回值
@Override
public List<RegionBean> setOnCitySelected(RegionBean regionBean) {
//接收选中的城市
mCity = regionBean.getName();
//获取当前城市的id
String cityId = regionBean.getId();
Log.e("dsadsasad",cityId);
//json数据 区
String district_json = JsonParser.getJson(MainActivity.this, "district.json");
List<Map<String, Object>> district_maps = getlistForJson(district_json);
//返回显示的区县
List<RegionBean> zoneBeans=new ArrayList<>();
for (int i = 0; i < district_maps.size(); i++) {
RegionBean zoneBean=new RegionBean(""+district_maps.get(i).get("code"),""+district_maps.get(i).get("name"));
//当前城市下的区县
if (cityId.equals(district_maps.get(i).get("cityCode"))){
zoneBeans.add(zoneBean);
}
}
return zoneBeans;
}
//四级联动时,必须有返回值。三级联动时,可忽略。
@Override
public List<RegionBean> setOnZoneSelected(RegionBean regionBean) {
//接收选中的区县
mZone = regionBean.getName();
//获取当前区县的id
String districtId = regionBean.getId();
//json数据 街道
String street_json = JsonParser.getJson(MainActivity.this, "street.json");
List<Map<String, Object>> street_maps = getlistForJson(street_json);
//返回显示的街道
List<RegionBean> zoneList=new ArrayList<>();
for (int i = 0; i < street_maps.size(); i++) {
RegionBean streetBean=new RegionBean(""+street_maps.get(i).get("code"),""+street_maps.get(i).get("name"));
//当前区县下的街道
if (districtId.equals(street_maps.get(i).get("areaCode"))){
zoneList.add(streetBean);
}
}
//返回显示的街道
//(如果是三级联动,则不需要返回)
return zoneList;
}
@Override
public void setOnAreaSelected(RegionBean regionBean) {
//如果是四级联动,则得到选中的街道,如果是三级联动,则没有返回
mArea = regionBean.getName();
//设置值
tv_region.setText(mProvince+" "+mCity+" "+mZone+" "+mArea);
}
});
}
/**
* json转换map
* @param jsonStr
* @return
*/
public static Map<String, Object> getMapForJson(String jsonStr){
JSONObject jsonObject ;
try {
jsonObject = new JSONObject(jsonStr);
Iterator<String> keyIter= jsonObject.keys();
String key;
Object value ;
Map<String, Object> valueMap = new HashMap<String, Object>();
while (keyIter.hasNext()) {
key = keyIter.next();
value = jsonObject.get(key);
valueMap.put(key, value);
}
return valueMap;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Log.e("dsasaddsa",e.toString());
}
return null;
}
/**
* json转换list<map>
* @param jsonStr
* @return
*/
public static List<Map<String, Object>> getlistForJson(String jsonStr){
List<Map<String, Object>> list = null;
try {
JSONArray jsonArray = new JSONArray(jsonStr);
JSONObject jsonObj ;
list = new ArrayList<Map<String,Object>>();
for(int i = 0 ; i < jsonArray.length() ; i ++){
jsonObj = (JSONObject)jsonArray.get(i);
list.add(getMapForJson(jsonObj.toString()));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return list;
}
}
|