AddressSelector

仿京东地址选择器

  • 所有者: openai/retro
  • 平台:
  • 许可证: MIT License
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

AddressSelector

一个 Android 版京东手机客户端(当前版本V1..0.0 )风格的级联地址选择器。
image

添加依赖

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

自定义样式

//设置字体的大小

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

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

在源数据库里要添加一个数据
AdressBean.ChangeRecordsBean changeRecordsBean = new AdressBean.ChangeRecordsBean();

    changeRecordsBean.parentId = 0;

    changeRecordsBean.name = "测试省";

    changeRecordsBean.id = 35;

    addressDictManager.inserddress(changeRecordsBean);

image

还可以进行已下操作 增加一个数据 inserddress(AdressBean.ChangeRecordsBean adress) 增加一个集合insertAddress(List<AdressBean.ChangeRecordsBean> 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

主要指标

概览
名称与所有者openai/retro
主编程语言C
编程语言Java (语言数: 23)
平台
许可证MIT License
所有者活动
创建于2018-02-07 00:32:02
推送于2024-02-22 13:04:14
最后一次提交2023-04-12 13:48:22
发布数10
最新版本名称f347d7e (发布于 )
第一版名称v0.5.2 (发布于 )
用户参与
星数3.5k
关注者数96
派生数532
提交数281
已启用问题?
问题数225
打开的问题数51
拉请求数34
打开的拉请求数9
关闭的拉请求数20
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?