废话不多说,直接上代码。注释也齐全:
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);
}
}