Android使用android-wheel实现省市县三级联动

Android使用android-wheel实现省市县三级联动,第1张

概述今天没事跟群里面侃大山,有个哥们说道AndroidWheel这个控件,以为是Andriod内置的控件,google一把,发现是个github上的一个控件。

今天没事跟群里面侃大山,有个哥们说道AndroID Wheel这个控件,以为是Andriod内置的控件,Google一把,发现是个github上的一个控件。

下载地址:https://code.Google.com/p/androID-wheel/    发现很适合做省市县三级联动就做了一个。

先看下效果图:

1、首先导入github上的wheel项目

2、新建个项目,然后选择记得右键->PropertIEs->AndroID中将wheel添加为lib:

上面两个步骤是导入所有开源项目的过程了。

3、下面开始代码的编写:首先是省市区的Json文件,放置在asserts的city.Json中:

大概的格式先了解一下,一会代码会根据这样的格式解析

{"cityList": [{"p":"河北","c":[{"n":"石家庄","a":[{"s":"长安区"},{"s":"桥东区"},{"s":"鹿泉市"}] }]}

 4、布局文件,比较简单就3个WheelVIEw分别代表省,市,县,还有一个按钮:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  xmlns:tools="http://schemas.androID.com/tools"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:background="#000000"  androID:orIEntation="vertical" >  <TextVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_gravity="center"    androID:layout_margin="10dp"    androID:text="请选择城市"    androID:textcolor="#ffffff"    androID:textSize="20sp" />  <linearLayout    androID:layout_wIDth="fill_parent"    androID:layout_height="wrap_content"    androID:background="@drawable/layout_bg"    androID:orIEntation="horizontal" >    <kankan.wheel.Widget.WheelVIEw      androID:ID="@+ID/ID_province"      androID:layout_wIDth="0dp"      androID:layout_height="wrap_content"      androID:layout_weight="1" >    </kankan.wheel.Widget.WheelVIEw>    <kankan.wheel.Widget.WheelVIEw      androID:ID="@+ID/ID_city"      androID:layout_wIDth="0dp"      androID:layout_height="wrap_content"      androID:layout_weight="1" >    </kankan.wheel.Widget.WheelVIEw>    <kankan.wheel.Widget.WheelVIEw      androID:ID="@+ID/ID_area"      androID:layout_wIDth="0dp"      androID:layout_height="wrap_content"      androID:layout_weight="1" >    </kankan.wheel.Widget.WheelVIEw>  </linearLayout>    <button  androID:onClick="showChoose" androID:layout_gravity="right" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="确定"    />  </linearLayout>

5、Activity的编写:注释相当详细,节不赘述了。

package com.example.wheel_province;@R_419_5565@ java.io.IOException;@R_419_5565@ java.io.inputStream;@R_419_5565@ java.util.HashMap;@R_419_5565@ java.util.Map;@R_419_5565@ kankan.wheel.Widget.OnWheelChangedListener;@R_419_5565@ kankan.wheel.Widget.WheelVIEw;@R_419_5565@ kankan.wheel.Widget.adapters.ArrayWheelAdapter;@R_419_5565@ org.Json.JsONArray;@R_419_5565@ org.Json.JsONException;@R_419_5565@ org.Json.JsONObject;@R_419_5565@ androID.app.Activity;@R_419_5565@ androID.os.Bundle;@R_419_5565@ androID.vIEw.VIEw;@R_419_5565@ androID.Widget.Toast;/** *  * @author zhy *  */public class CitIEsActivity extends Activity implements OnWheelChangedListener{ /** * 把全国的省市区的信息以Json的格式保存,解析完成后赋值为null */ private JsONObject mJsonObj; /** * 省的WheelVIEw控件 */ private WheelVIEw mProvince; /** * 市的WheelVIEw控件 */ private WheelVIEw mCity; /** * 区的WheelVIEw控件 */ private WheelVIEw mArea; /** * 所有省 */ private String[] mProvinceDatas; /** * key - 省 value - 市s */ private Map<String,String[]> mCitisDatasMap = new HashMap<String,String[]>(); /** * key - 市 values - 区s */ private Map<String,String[]> mAreaDatasMap = new HashMap<String,String[]>(); /** * 当前省的名称 */ private String mCurrentProvicename; /** * 当前市的名称 */ private String mCurrentCityname; /** * 当前区的名称 */ private String mCurrentAreaname =""; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.citys); initJsonData(); mProvince = (WheelVIEw) findVIEwByID(R.ID.ID_province); mCity = (WheelVIEw) findVIEwByID(R.ID.ID_city); mArea = (WheelVIEw) findVIEwByID(R.ID.ID_area); initDatas(); mProvince.setVIEwAdapter(new ArrayWheelAdapter<String>(this,mProvinceDatas)); // 添加change事件 mProvince.addChangingListener(this); // 添加change事件 mCity.addChangingListener(this); // 添加change事件 mArea.addChangingListener(this); mProvince.setVisibleItems(5); mCity.setVisibleItems(5); mArea.setVisibleItems(5); updateCitIEs(); updateAreas(); } /** * 根据当前的市,更新区WheelVIEw的信息 */ private voID updateAreas() { int pCurrent = mCity.getCurrentItem(); mCurrentCityname = mCitisDatasMap.get(mCurrentProvicename)[pCurrent]; String[] areas = mAreaDatasMap.get(mCurrentCityname); if (areas == null) {  areas = new String[] { "" }; } mArea.setVIEwAdapter(new ArrayWheelAdapter<String>(this,areas)); mArea.setCurrentItem(0); } /** * 根据当前的省,更新市WheelVIEw的信息 */ private voID updateCitIEs() { int pCurrent = mProvince.getCurrentItem(); mCurrentProvicename = mProvinceDatas[pCurrent]; String[] citIEs = mCitisDatasMap.get(mCurrentProvicename); if (citIEs == null) {  citIEs = new String[] { "" }; } mCity.setVIEwAdapter(new ArrayWheelAdapter<String>(this,citIEs)); mCity.setCurrentItem(0); updateAreas(); } /** * 解析整个Json对象,完成后释放Json对象的内存 */ private voID initDatas() { try {  JsONArray JsonArray = mJsonObj.getJsONArray("cityList");  mProvinceDatas = new String[JsonArray.length()];  for (int i = 0; i < JsonArray.length(); i++)  {  JsONObject JsonP = JsonArray.getJsONObject(i);// 每个省的Json对象  String province = JsonP.getString("p");// 省名字  mProvinceDatas[i] = province;  JsONArray JsonCs = null;  try  {   /**   * Throws JsONException if the mapPing doesn't exist or is   * not a JsONArray.   */   JsonCs = JsonP.getJsONArray("c");  } catch (Exception e1)  {   continue;  }  String[] mCitIEsDatas = new String[JsonCs.length()];  for (int j = 0; j < JsonCs.length(); j++)  {   JsONObject JsonCity = JsonCs.getJsONObject(j);   String city = JsonCity.getString("n");// 市名字   mCitIEsDatas[j] = city;   JsONArray JsonAreas = null;   try   {   /**    * Throws JsONException if the mapPing doesn't exist or    * is not a JsONArray.    */   JsonAreas = JsonCity.getJsONArray("a");   } catch (Exception e)   {   continue;   }   String[] mAreasDatas = new String[JsonAreas.length()];// 当前市的所有区   for (int k = 0; k < JsonAreas.length(); k++)   {   String area = JsonAreas.getJsONObject(k).getString("s");// 区域的名称   mAreasDatas[k] = area;   }   mAreaDatasMap.put(city,mAreasDatas);  }  mCitisDatasMap.put(province,mCitIEsDatas);  } } catch (JsONException e) {  e.printstacktrace(); } mJsonObj = null; } /** * 从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,len,"gbk"));  }  is.close();  mJsonObj = new JsONObject(sb.toString()); } catch (IOException e) {  e.printstacktrace(); } catch (JsONException e) {  e.printstacktrace(); } } /** * change事件的处理 */ @OverrIDe public voID onChanged(WheelVIEw wheel,int oldValue,int newValue) { if (wheel == mProvince) {  updateCitIEs(); } else if (wheel == mCity) {  updateAreas(); } else if (wheel == mArea) {  mCurrentAreaname = mAreaDatasMap.get(mCurrentCityname)[newValue]; } } public voID showChoose(VIEw vIEw) { Toast.makeText(this,mCurrentProvicename + mCurrentCityname + mCurrentAreaname,1).show(); }}

源码下载:http://xiazai.jb51.net/201608/yuanma/Androidwheel(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android使用android-wheel实现省市县三级联动全部内容,希望文章能够帮你解决Android使用android-wheel实现省市县三级联动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存