地区选择在app中十分常见,但是android原生没有自带。不过有很多很成熟的框架代替。这里的实现的地区选择是比较老式的 3级联动 。这种方式 简单,灵活,适用性高。
很多app没有特殊要求,就是默认方式。 下面说说实现步骤:
-
框架依赖
compile ‘com.contrarywind:Android-PickerView:4.1.6’ -
java代码 ,初始化选择器
pvOptions = new OptionsPickerBuilder(mContext, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
// //选择成功后 执行 options 1,2,3 分别是你填入数据 array的选中的下标
//可以理解为 省市区选中条目} }).setOptionsSelectChangeListener(new OnOptionsSelectChangeListener() { @Override public void onOptionsSelectChanged(int options1, int options2, int options3) { //选择改变 执行 } }).setSubmitText("确定")//确定按钮文字 .setCancelText("取消")//取消按钮文字 .setTitleText("城市选择")//标题 .setSubCalSize(16)//确定和取消文字大小 .setTitleSize(16)//标题文字大小 .setContentTextSize(16)//滚轮文字大小 .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。 .setCyclic(false, false, false)//循环与否 .setSelectOptions(0, 0, 0) //设置默认选中项 .setOutSideCancelable(false)//点击外部dismiss default true .isRestoreItem(true)//切换时是否还原,设置默认选中第一项。 .build(); pvOptions.setPicker(provinceBeanList, cityList);//添加数据源
}
-
初始化数据
//我这里只是2级。
//注意这个框架数据是 list<list> 方式 填入,并且只能是String
//我下面会给大家理理。怎么填充2级的。3级的就是2级再加一层循环
// 省份
ArrayList provinceBeanList = new ArrayList<>(); //第一级数据
// 城市ArrayList<List> cityList = new ArrayList<>();//第二级
ArrayList cities;//变量,用于节省存储的
// 原生省级数据 list 。 yuanshi 。循环获得省名,放入 第一级数据 中 for (int i=0;i<yuanshi.size();i++){ MyAreaBean myAreaBean = yuanshi.get(i); // 把当前下标的省名 添加到第一级数据中, 第一级只有String provinceBeanList.add(myAreaBean.getText()); //解析 原生数据中的 第二级数据 List<MyAreaBean.ChildrenBean> children = myAreaBean.getChildren(); // 把 当前下标 省对应 的第二级数据 市 名 添加到 cities 里面 //cities :当前省下面的市 数据 ,临时存下市级数据 = for (int y=0;y<children.size();y++){ MyAreaBean.ChildrenBean childrenBean = children.get(y); cities.add(childrenBean.getText()); /* //如果有第三级一样的 //当前市 下的 所有县级的数据 List<NextChidrenBean >bean= childrenBean.getNextChidrenBean(); //定一个一个县级数组,临时存下县级数据 xianLists =new ArrayList<>(); //新建变量 市级 数组 Arraylist<LIst<String>> shi_xianData, shi_xianData= new Arraylist<LIst<String>>; //用于添加 xianLists //最后放入总的县级数据 //Arralist<List<LIst<String >>> sheng_shi_xianData中 for(int z=0;bean.size();z++){ xianLists.add(bean.getText()); } //把 这个市的所有县数据 放入 shi_xianData.add(xianLists): //最后上一层 省级循环中 ,在县的总数据sheng_shi_xianData //添加 进入shi_xianData */ } // 所有省的市list数据 添加 当前省的市 数据 cityList.add(cities); }
4.有了数据后,设置数据,初始化算是完了
pvOptions.setPicker(provinceBeanList, cityList);//添加数据源
-
3级联动选择器,显示
pvOptions.show(); -
实现选择成功后的操作,在第二步 ,初始化 选择器 的onOptionsSelect 方法中。
如果服务器需要传的是id。根据 下标 去获得
总结:
使用还是不难,就是 它要的数据格式有点让人晕。
需要把你数据,合成一个它能用的数据。不过 静下来 理理也很快的。