# AddressSelector **Repository Path**: cooppor/AddressSelector ## Basic Information - **Project Name**: AddressSelector - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-06-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AddressSelector 一个 Android 版京东手机客户端(当前版本V1..0.0 )风格的级联地址选择器。 ![image](/screenshots/screenshot1.gif) ## 添加依赖 在`build.gradle` 中: dependencies { ... compile 'com.smartTop:jd-address:1.0.3' } ## 使用方法 AddressSelector selector = new AddressSelector(context); selector.setOnAddressSelectedListener(new AddressSelector.OnAddressSelectedListener() { @Override public void onAddressSelected(Province province, City city, County county, Street street) { // blahblahblah } }); View view = selector.getView(); content.addView(view); 默认的样式 ![image](/screenshots/screenshort4.png) 自定义样式 //设置字体的大小 selector.setTextSize(14); //设置指示器的背景颜色 selector.setIndicatorBackgroundColor("#00ff00"); 或 selector.setIndicatorBackgroundColor(android.R.color.holo_orange_light); //设置字体的背景 selector.setBackgroundColor(android.R.color.holo_red_light); //设置字体获得焦点的颜色 selector.setTextSelectedColor(android.R.color.holo_orange_light); //设置字体没有获得焦点的颜色 selector.setTextUnSelectedColor(android.R.color.holo_blue_light); //自定义dialog的样式 dialog.setTextSize(14);//设置字体的大小 dialog.setIndicatorBackgroundColor(android.R.color.holo_orange_light);//设置指示器的颜色 dialog.setTextSelectedColor(android.R.color.holo_orange_light);//设置字体获得焦点的颜色 dialog.setTextUnSelectedColor(android.R.color.holo_blue_light);//设置字体没有获得焦点的颜色 dialog.setDisplaySelectorArea("31",1,"2704",1,"2711",0,"15582",1);//设置已选中的地区(第一个参数 省份的code,第二个参数 省份在列表中的位置,第三个参数 城市的code 第四个参数 城市在列表中的位置,...) 效果图 ![image](/screenshots/screenshort5.png) ### BottomDialog 弹出地址选择器的dialog的用法及回调 BottomDialog dialog = new BottomDialog(context); dialog.setOnAddressSelectedListener(this); dialog.setDialogDismisListener(this); dialog.setSelectorAreaPositionListener(this); dialog.show(); @Override public void onAddressSelected(Province province, City city, County county, Street street) { provinceCode = (province == null ? "" : province.code); cityCode = (city == null ? "" : city.code); countyCode = (county == null ? "" : county.code); streetCode = (street == null ? "" : street.code); LogUtil.d("数据", "省份id=" + provinceCode); LogUtil.d("数据", "城市id=" + cityCode); LogUtil.d("数据", "乡镇id=" + countyCode); LogUtil.d("数据", "街道id=" + streetCode); String s = (province == null ? "" : province.name) + (city == null ? "" : city.name) + (county == null ? "" : county.name) + (street == null ? "" : street.name); tv_selector_area.setText(s); if (dialog != null) { dialog.dismiss(); } } @Override public void dialogclose() { if(dialog!=null){ dialog.dismiss(); } } 选中的地区在列表中的位置 @Override public void selectorAreaPosition(int provincePosition, int cityPosition, int countyPosition, int streetPosition) { this.provincePosition = provincePosition; this.cityPosition = cityPosition; this.countyPosition = countyPosition; this.streetPosition = streetPosition; LogUtil.d("数据", "省份位置=" + provincePosition); LogUtil.d("数据", "城市位置=" + cityPosition); LogUtil.d("数据", "乡镇位置=" + countyPosition); LogUtil.d("数据", "街道位置=" + streetPosition); } ### 有朋友问,怎么使用自己的数据源,这里我说明一下,因为我的数据库里的地址表,省,市,区,县,镇,都是用同一个表,根据parentId来查询的。 想用自己的数据源,就需要把自己的数据源里,各个字段与我的数据源里字段一一对应(id, parentId, code, name),分别对应的中文意思(id,父id(可根据父id查询下一级),地址编码,中文名字) 然后在你的项目里的assets目录下,放上你的数据库,名字一定是"address.db". 如果你用的是android studio 应该放在 ![image](/screenshots/screenshort2.png) ### 在源数据库里要添加一个数据 AdressBean.ChangeRecordsBean changeRecordsBean = new AdressBean.ChangeRecordsBean(); changeRecordsBean.parentId = 0; changeRecordsBean.name = "测试省"; changeRecordsBean.id = 35; addressDictManager.inserddress(changeRecordsBean); ![image](/screenshots/screenshort3.png) ### 还可以进行已下操作 增加一个数据 inserddress(AdressBean.ChangeRecordsBean adress) 增加一个集合insertAddress(List list) 更新数据 updateAddressInfo(AdressBean.ChangeRecordsBean adress) 查找数据 getAddressList() 获取省市列表 getProvinceList() 根据省市id 获取城市列表 getCityList(int provinceId) 获取城市对应的区,乡镇列表 getCountyList(int cityId) 获取区,乡镇对应的街道列表 getStreetList(int countyId) 查找消息临时列表中是否存在这一条记录 isExist() ### 最近在我博客上有人问我,能不能加一个功能,就是记住选择后的地址,点击编辑地址的时候,可以直接显示了。 dialog.setDisplaySelectorArea("31",1,"2704",1,"2711",0,"15582",1);//设置已选中的地区(第一个参数 省份的code,第二个参数 省份在列表中的位置,第三个参数 城市的code 第四个参数 城市在列表中的位置,...) 用法: /** * 根据code 来显示选择过的地区 */ private void getSelectedArea(){ //根据省份的code,从数据库里查询省份的名字 String province = addressDictManager.getProvince(provinceCode); //根据城市的code,从数据库里查询城市的名字 String city = addressDictManager.getCity(cityCode); //根据乡镇的code,从数据库里查询乡镇的名字 String county = addressDictManager.getCounty(countyCode); //根据街道的code,从数据库里查询街道的名字 String street = addressDictManager.getStreet(streetCode); LogUtil.d("数据", "省份=" + province); LogUtil.d("数据", "城市=" + city); LogUtil.d("数据", "乡镇=" + county); LogUtil.d("数据", "街道=" + street); } ## 关于我 **smartTop** - 博客 http://blog.csdn.net/qq_30740239 - gitHub https://github.com/smartTop/AddressSelector - QQ 1273436145