android pickerview 多行,Android PickerView实现三级联动效果
GitHub有一个开源控件PickerView,可以实现三级联动的效果。虽然该控件使用非常简单,但是填充数据异常繁琐。GitHub上的Demo在填充数据的时候是一条一条地填充的,代码过于冗余。下面提供一种简便的方式来实现。
(1)在app目录下新建一个assets文件夹,将province_data.xml文件复制到该文件夹下,该XML文件里保存了全国的省市县的地址数据。
(2)使用SAX解析xml文件中的数据,并将数据填充到PickerView这个控件中。
—ProvinceModel—
public class ProvinceModel implements IPickerViewData
{
private String name;
private List cityList;
public ProvinceModel()
{
super();
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public List getCityList()
{
return cityList;
}
public void setCityList(List cityList)
{
this.cityList = cityList;
}
@Override
public String getPickerViewText()
{
return name;
}
}
—CityModel—
public class CityModel implements IPickerViewData
{
private String name;
private List districtList;
public CityModel()
{
super();
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public List getDistrictList()
{
return districtList;
}
public void setDistrictList(List districtList)
{
this.districtList = districtList;
}
@Override
public String toString()
{
return name;
}
@Override
public String getPickerViewText()
{
return name;
}
}
—DistrictModel—
public class DistrictModel implements IPickerViewData
{
private String name;
private String zipcode;
public DistrictModel()
{
super();
}
public String getZipcode()
{
return zipcode;
}
public void setZipcode(String zipcode)
{
this.zipcode = zipcode;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Override
public String toString()
{
return name;
}
@Override
public String getPickerViewText()
{
return name;
}
}
—XmlParserHandler—
public class XmlParserHandler extends DefaultHandler
{
/**
* 存储所有的解析对象
*/
private List provinceList = new ArrayList<>();
private ProvinceModel provinceModel = new ProvinceModel();
private CityModel cityModel = new CityModel();
private DistrictModel districtModel = new DistrictModel();
public XmlParserHandler(){}
public List getDataList()
{
return provinceList;
}
@Override
public void startDocument() throws SAXException
{
super.startDocument();
}
@Override
public void endDocument() throws SAXException
{
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
{
if (qName.equals("province"))
{
provinceModel = new ProvinceModel();
provinceModel.setName(attributes.getValue(0));
provinceModel.setCityList(new ArrayList());
}
else if (qName.equals("city"))
{
cityModel = new CityModel();
cityModel.setName(attributes.getValue(0));
cityModel.setDistrictList(new ArrayList());
}
else if (qName.equals("district"))
{
districtModel = new DistrictModel();
districtModel.setName(attributes.getValue(0));
districtModel.setZipcode(attributes.getValue(1));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException
{
if(qName.equals("district"))
{
cityModel.getDistrictList().add(districtModel);
}
else if(qName.equals("city"))
{
provinceModel.getCityList().add(cityModel);
}
else if(qName.equals("province"))
{
provinceList.add(provinceModel);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
super.characters(ch, start, length);
}
}
public class AddressAddActivity extends BaseActivity
{
private OptionsPickerView mCityPickerView;
private ArrayList mProvinces = new ArrayList<>();
private ArrayList> mCities = new ArrayList<>();
private ArrayList>> mDistricts = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_address_add);
ViewUtils.inject(this);
init();
}
private void init()
{
initProvinceDatas();
try
{
//选项选择器
mCityPickerView = new OptionsPickerView(this);
mCityPickerView.setPicker( mProvinces, mCities, mDistricts, true);
mCityPickerView.setTitle("选择城市");
mCityPickerView.setCyclic(false, false , false);
mCityPickerView.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3)
{
String address = mProvinces.get(options1).getName() + " "
+ mCities.get(options1).get(option2) + " "
+ mDistricts.get(options1).get(option2).get(options3);
mTxtAddress.setText(address);
}
});
}
catch (Exception e)
{
e.printStackTrace();
}
}
@OnClick(R.id.ll_city_picker)
public void showpickerView(View view)
{
mCityPickerView.show();
}
protected void initProvinceDatas()
{
AssetManager asset = getAssets();
try
{
InputStream input = asset.open("province_data.xml");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
XmlParserHandler handler = new XmlParserHandler();
parser.parse(input , handler);
input.close();
//获取解析出来的数据
mProvinces = (ArrayList) handler.getDataList();
}
catch (Throwable e)
{
e.printStackTrace();
}
if (mProvinces != null)
{
for (ProvinceModel p : mProvinces)
{
List cities = p.getCityList();
//组装城市数据
mCities.add((ArrayList) cities);
ArrayList> dts = new ArrayList<>();
for (CityModel c : cities)
{
List districts = c.getDistrictList();
dts.add((ArrayList) districts);
}
mDistricts.add(dts);
}
}
}
}
到此完毕,很简单的例子。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android pickerview 多行,Android PickerView实现三级联动效果相关推荐
- 怎样使用pickerview来实现地址菜单的三级联动效果
现在很多的app,尤其是电商类的app在添加地址功能里面一般都会使用地址的三级联动,那么它是怎么实现的呢?其实很简单,现在简单的介绍一下使用第三方的依赖来实现三级联动的效果. 1.开始编写 1).在m ...
- 简单的一个用javascript做的'省市区'三级联动效果
2019独角兽企业重金招聘Python工程师标准>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transition ...
- [Python] PyQt5+Pycharm 实现省、市、区/县三级联动效果
Pyhton版本3.6 联动效果由三个py文件组成:一个是ui界面.一个逻辑脚本和省.市.区/县的信息文件. 先放上省.市.区/县的信息文件. #!usr/bin/env python # -*-co ...
- js之省市区(县)三级联动效果
省市区(县)三级联动效果,是我们软件开发比较常用的,特别是对一些crm,erp之类,当然也包括其他的后台管理系统,基本都涉及到,今天贴出这个常用的,方便个人复用和大家使用 <!DOCTYPE h ...
- php 把省市存入数据库,用JS做了个省市县三级联动效果可存入数据库的值老不对,有代码...
用JS做了个省市县三级联动效果可存入数据库的值老不对,有代码,在线等 现在的问题是这样的,当我选好地址后就提交他到数据库中去,可是现在怎么修改提交到数据库中的值都是前面的那些编码,就不是后面的文字.要 ...
- jquery三级联动模糊查询_js相关:jQuery实现三级联动效果
js相关:jQuery实现三级联动效果 发布于 2020-7-21| 复制链接 摘记: 很久没写了,顺带复习,写了一个jQuery实现的三级联动,供大家参考,具体内容如下 ```xhtml .. 很久 ...
- android 仿ios三级联动,仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果...
Android-PickerView 注意事项.详请使用方式.更新日志等,请查看 Wiki文档 Wiki文档,Wiki文档,Wiki文档 !~ 重要的事情说三遍 对于使用上有任何疑问或优化建议等,欢迎 ...
- android tablelayout 多行,android – 自定义TableLayout,行中有多个TextView
我想用这样的行来创建自定义TableLayout: 电视用于TextView,即我想在行中添加11个TextView: 每行以标题开头,然后我添加5对TextView,这样表格行就像屏幕一样宽. 这是 ...
- android ellipsize 多行,android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法...
android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法 布局文件中的TextView属性 复制代码 代码如下: android:id="@+id/b ...
- android tablelayout 多行,Android入门户五篇之TableLayout (二)//生成10行,8列的表格
当前位置:我的异常网» Android » Android入门户五篇之TableLayout (二)//生成10行,8 Android入门户五篇之TableLayout (二)//生成10行,8列的表 ...
最新文章
- mtrand.RandomState.randint low = high
- java.util.concurrent.FutureTask 源码
- Reddit如何使用Memcached来存储3TB的缓存数据--转
- AtCoder AGC031F Walk on Graph (图论、数论)
- 州 选择国家_青海的三大城市:海南州、海北州和海西州,谁的风景更美?
- c语言 typedef的用法
- apt-get更新软件包_如何使用Apt-fast加速软件包下载和更新
- 为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布
- bzoj3389:[Usaco2004 Dec]Cleaning Shifts安排值班
- MySQL—赋权(grant)和回收权限(revoke)
- java ip地址转数字_ip地址与整数相互转换
- C#如何获取物理网卡,虚拟网卡,以及无线网卡
- 基于SSM的灾情发布平台
- 如何新建一个vue项目(图文详解)
- php自动发卡程序8.0_php自动发卡平台源码
- CSDN资源上传记录(持续更新)
- IDEA JetBrains Mono 字体安装
- 工程数学(线性代数)笔记
- .net中对象名无效问题解决
- 为什么28岁不能学java_28岁大龄人学java不是不可能
热门文章
- 毕业设计 - 基于JAVA人脸识别管理系统(人脸搜索与人脸库管理)
- VC6.0用file-open后,出现“MSDEV.EXE-应用程序错误 遇到问题需要关闭“
- 深入理解Nginx~网络连接的设置
- 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线【图】_品牌资讯_服饰_太平洋时尚网...
- stm8s电机库vtimer_SetTimer()函数的使用
- 复杂c语言游戏程序代码,【计算机】c语言经典游戏代码分享!
- JavaScript实现(轮播图,随机数,抽名字游戏,广告循环文字)
- 控制理论与控制工程算计算机相关专业吗,控制理论与控制工程专业介绍
- 几何画板椭圆九种画法_几何画板怎么制作椭圆定义演示动画?
- JCreator 使用技巧