基于github 开源框架Android-PickerView-master实现省市三级联动

来源:互联网 发布:JVM1099端口被占用 编辑:程序博客网 时间:2024/05/21 22:25

废话不多说,直接上代码。注释也齐全:

package com.bigkoo.pickerviewdemo;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;import android.widget.Toast;import com.bigkoo.pickerview.OptionsPickerView;import com.bigkoo.pickerview.TimePickerView;import com.bigkoo.pickerviewdemo.bean.China;import com.bigkoo.pickerviewdemo.bean.ProvinceBean;import com.google.gson.Gson;public class MainActivity extends Activity {    private ArrayList<ProvinceBean> options1Items = new ArrayList<ProvinceBean>();    private ArrayList<ArrayList<String>> options2Items = new ArrayList<ArrayList<String>>();    private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<ArrayList<ArrayList<String>>>();    private TextView tvOptions;    TimePickerView pvTime;    OptionsPickerView pvOptions;    View vMasker;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initData();        vMasker=findViewById(R.id.vMasker);        tvOptions=(TextView) findViewById(R.id.tvOptions);        //选项选择器        pvOptions = new OptionsPickerView(this);        //三级联动效果        pvOptions.setPicker(options1Items, options2Items, options3Items, true);        //设置选择的三级单位//        pwOptions.setLabels("省", "市", "区");        pvOptions.setTitle("选择城市");        pvOptions.setCyclic(false, true, true);        //设置默认选中的三级项目        //监听确定选择按钮        pvOptions.setSelectOptions(1, 1, 1);        pvOptions.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {            @Override            public void onOptionsSelect(int options1, int option2, int options3) {                //返回的分别是三个级别的选中位置                String tx = options1Items.get(options1).getPickerViewText()                        + options2Items.get(options1).get(option2)                        + options3Items.get(options1).get(option2).get(options3);                tvOptions.setText(tx);                vMasker.setVisibility(View.GONE);            }        });        //点击弹出选项选择器        tvOptions.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                pvOptions.show();            }        });    }    private void initData(){        try {//解析json数据            InputStream is = getResources().getAssets().open("city.json");            int available = is.available();            byte [] b=new byte[available];            int read = is.read(b);//注意格式,utf-8 或者gbk  否则解析出来可能会出现乱码            String json=new String(b,"GBK");                 System.out.println(json);            Gson gson= new Gson();            China china = gson.fromJson(json, China.class);            ArrayList<China.Province> citylist = china.citylist;            //======省级            for (China.Province province: citylist                    ) {                String provinceName = province.p;               // System.out.println("provinceName==="+provinceName);                ArrayList<China.Province.Area> c = province.c;                //选项1                options1Items.add(new ProvinceBean(0,provinceName,"",""));                ArrayList<ArrayList<String>> options3Items_01 = new ArrayList<ArrayList<String>>();                //区级                //选项2                ArrayList<String> options2Items_01=new ArrayList<String>();                if (c!=null) {                    for (China.Province.Area area : c                            ) {                        //System.out.println("area------" + area.n + "------");                        options2Items_01.add(area.n);                        ArrayList<China.Province.Area.Street> a = area.a;                        ArrayList<String> options3Items_01_01=new ArrayList<String>();                        //县级                        if (a!=null) {                            for (China.Province.Area.Street street : a                                    ) {                               // System.out.println("street/////" + street.s);                                options3Items_01_01.add(street.s);                            }                            options3Items_01.add(options3Items_01_01);                        }else{                            //县级为空的时候                            options3Items_01_01.add("");                            options3Items_01.add(options3Items_01_01);                        }                    }                    options2Items.add(options2Items_01);                }else{                    //区级为空的时候  国外                    options2Items_01.add("");                }                options3Items.add(options3Items_01);                ArrayList<String> options3Items_01_01=new ArrayList<String>();                options3Items_01_01.add("");                options3Items_01.add(options3Items_01_01);            }        } catch (IOException e) {            e.printStackTrace();        }    }    public static String getTime(Date date) {        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");        return format.format(date);    }}

demo下载地址

2 1