android 实现地区选择3级联动效果

地区选择在app中十分常见,但是android原生没有自带。不过有很多很成熟的框架代替。这里的实现的地区选择是比较老式的 3级联动 。这种方式 简单,灵活,适用性高。
很多app没有特殊要求,就是默认方式。 下面说说实现步骤:

  1. 框架依赖
    compile ‘com.contrarywind:Android-PickerView:4.1.6’

  2. 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);//添加数据源
    

    }

  3. 初始化数据
    //我这里只是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);//添加数据源

  1. 3级联动选择器,显示
    pvOptions.show();

  2. 实现选择成功后的操作,在第二步 ,初始化 选择器 的onOptionsSelect 方法中。
    如果服务器需要传的是id。根据 下标 去获得

总结:

使用还是不难,就是 它要的数据格式有点让人晕。
需要把你数据,合成一个它能用的数据。不过 静下来 理理也很快的。

猜你喜欢

转载自blog.csdn.net/qq_40803752/article/details/86107115