/**
* 省、市、区三级联动演示Demo
*
* @author zhouyou
*/
public class MainActivity extends Activity {
// 省数据集合
private ArrayList<String> mListProvince = new ArrayList<String>();
// 市数据集合
private ArrayList<ArrayList<String>> mListCiry = new ArrayList<ArrayList<String>>();
// 区数据集合
private ArrayList<ArrayList<ArrayList<String>>> mListArea = new ArrayList<ArrayList<ArrayList<String>>>();
private OptionsPickerView<String> mOpv;
private JSONObject mJsonObj;
private TextView mCity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCity = (TextView) findViewById(R.id.city);
// 初始化Json对象
initJsonData();
// 初始化Json数据
initJsonDatas();
// 创建选项选择器对象
mOpv = new OptionsPickerView<String>(this);
// 设置标题
mOpv.setTitle("选择城市");
// 设置三级联动效果
mOpv.setPicker(mListProvince, mListCiry, mListArea, true);
// 设置是否循环滚动
mOpv.setCyclic(false, false, false);
// 设置默认选中的三级项目
mOpv.setSelectOptions(0, 0, 0);
// 监听确定选择按钮
mOpv.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3) {
// 返回的分别是三个级别的选中位置
String tx = mListProvince.get(options1) + mListCiry.get(options1).get(option2) + mListArea.get(options1).get(option2).get(options3);
mCity.setText(tx);
}
});
// 点击弹出选项选择器
mCity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOpv.show();
}
});
}
/** 从assert文件夹中读取省市区的json文件,然后转化为json对象 */
private void initJsonData() {
try {
StringBuffer sb = new StringBuffer();
InputStream is = getAssets().open("city.json");
int len = -1;
byte[] buf = new byte[1024];
while ((len = is.read(buf)) != -1) {
sb.append(new String(buf, 0, len, "GBK"));
}
is.close();
mJsonObj = new JSONObject(sb.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
/** 初始化Json数据,并释放Json对象 */
private void initJsonDatas(){
try {
JSONArray jsonArray = mJsonObj.getJSONArray("citylist");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonP = jsonArray.getJSONObject(i);// 获取每个省的Json对象
String province = jsonP.getString("name");
ArrayList<String> options2Items_01 = new ArrayList<String>();
ArrayList<ArrayList<String>> options3Items_01 = new ArrayList<ArrayList<String>>();
JSONArray jsonCs = jsonP.getJSONArray("city");
for (int j = 0; j < jsonCs.length(); j++) {
JSONObject jsonC = jsonCs.getJSONObject(j);// 获取每个市的Json对象
String city = jsonC.getString("name");
options2Items_01.add(city);// 添加市数据
ArrayList<String> options3Items_01_01 = new ArrayList<String>();
JSONArray jsonAs = jsonC.getJSONArray("area");
for (int k = 0; k < jsonAs.length(); k++) {
options3Items_01_01.add(jsonAs.getString(k));// 添加区数据
}
options3Items_01.add(options3Items_01_01);
}
mListProvince.add(province);// 添加省数据
mListCiry.add(options2Items_01);
mListArea.add(options3Items_01);
}
} catch (JSONException e) {
e.printStackTrace();
}
mJsonObj = null;
}
}