android 行布局选择器,Android 选择器 PickerView实例,时间选择器、地址选择器、单项选择器、多项选择器自定义布局...

private OptionsPickerView locationOptions;

//显示地址选择器

public void showLocationPicker() {// 弹出选择器

if(!isLoaded){

Toast.makeText(context,context.getResources().getString(R.string.loading_location_data),Toast.LENGTH_SHORT).show();

return;

}

locationOptions = new OptionsPickerBuilder(context, new OnOptionsSelectListener() {

@Override

public void onOptionsSelect(int options1, int options2, int options3, View v) {

//

}

})

.setLayoutRes(R.layout.picker_location, new CustomListener() {

@Override

public void customLayout(View v) {

final TextView tvSubmit = v.findViewById(R.id.picker_location_inc_bg).findViewById(R.id.include_picker_tv_submit);

final TextView tvCancle = v.findViewById(R.id.picker_location_inc_bg).findViewById(R.id.include_picker_tv_cancle);

tvSubmit.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if(!isChanged){//没有改变默认选择第一项

String firstLocation = options1Items.get(0).getPickerViewText() + "\t" +  options2Items.get(0).get(0);

EventBus.getDefault().post(new PickerMessageEvent(MESSAGE_TYPE_LOCATION,firstLocation,"0"));

}else {

EventBus.getDefault().post(new PickerMessageEvent(MESSAGE_TYPE_LOCATION,checkedLocation,"0"));

}

locationOptions.dismiss();

}

});

}

})

.setOptionsSelectChangeListener(new OnOptionsSelectChangeListener() {

@Override

public void onOptionsSelectChanged(int options1, int options2, int options3) {

String opt1tx = options1Items.size() > 0 ?

options1Items.get(options1).getPickerViewText() : "";

String opt2tx = options2Items.size() > 0

&& options2Items.get(options1).size() > 0 ?

options2Items.get(options1).get(options2) : "";

checkedLocation = opt1tx + "\t" + opt2tx;

isChanged = true;

}

})

.setLineSpacingMultiplier(2.4f)//设置距离

.setItemVisibleCount(3)//设置显示的数据数量

.setContentTextSize(17)//设置标题字号

.isRestoreItem(true)//是否每次从头开始显示数据

.isAlphaGradient(true)

.build();

locationOptions.setPicker(options1Items, options2Items);

locationOptions.show();

}

//初始化地区数据

private void initJsonData() {//解析数据

/**

* 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件

* 关键逻辑在于循环体

*

* */

String JsonData = new GetJsonDataUtil().getJson(context, "province.json");//获取assets目录下的json文件数据

ArrayList jsonBean = parseData(JsonData);//用Gson 转成实体

/**

* 添加省份数据

*

* 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,

* PickerView会通过getPickerViewText方法获取字符串显示出来。

*/

options1Items = jsonBean;

for (int i = 0; i < jsonBean.size(); i++) {//遍历省份

ArrayList cityList = new ArrayList<>();//该省的城市列表(第二级)

ArrayList> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)

for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市

String cityName = jsonBean.get(i).getCityList().get(c).getName();

cityList.add(cityName);//添加城市

//                ArrayList city_AreaList = new ArrayList<>();//该城市的所有地区列表

//如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃

/*if (jsonBean.get(i).getCityList().get(c).getArea() == null

|| jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {

city_AreaList.add("");

} else {

city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());

}*/

//                city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());

//                province_AreaList.add(city_AreaList);//添加该省所有地区数据

}

/**

* 添加城市数据

*/

options2Items.add(cityList);

/**

* 添加地区数据

*/

//            options3Items.add(province_AreaList);

}

mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);

}

//解析地区json文件

public ArrayList parseData(String result) {//Gson 解析

ArrayList detail = new ArrayList<>();

try {

JSONArray data = new JSONArray(result);

Gson gson = new Gson();

for (int i = 0; i < data.length(); i++) {

JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);

detail.add(entity);

}

} catch (Exception e) {

e.printStackTrace();

mHandler.sendEmptyMessage(MSG_LOAD_FAILED);

}

return detail;

}

public void removeHandler(){

if (mHandler != null) {

mHandler.removeCallbacksAndMessages(null);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值