用ExpandableListView做省市二级联动

今天休息时,我在读一本书,包着书皮的缘由,项目经理不知我在读什么,遂问,你读什么书,我随口道“biancheng”。项目经理听罢,满面笑容,旋即对他一侧的一个人(也是我的同事)讲,你看人家知道在休息时间补充能量,你只知道玩手机,差距就是这样一点一点落下来的!我当时偷笑,委实只能这样了,我是在读“biancheng”,只不过该书的作者是沈从文。

言归正传,项目中需要用到ExpandableListView,自己写了一个Demo,将它记录于此。

先看看主要的XML文件:

<LinearLayoutxmlns: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”><ScrollViewandroid:layout_width=”match_parent”android:layout_height=”match_parent”><LinearLayoutandroid:layout_width=”match_parent”android:layout_height=”wrap_content”android:orientation=”vertical”><TextViewandroid:layout_width=”match_parent”android:layout_height=”wrap_content”android:gravity=”center”android:textSize=”24sp”android:text=”@string/the_two_provinces_linkage”/><!–两个自定义的expandablelistview控件–><com.example.expandablelistviewtest.ScrollExpandableListViewandroid:id=”@+id/provinceList”android:layout_width=”match_parent”android:layout_height=”wrap_content”android:childDivider=”@drawable/child_bg”/><com.example.expandablelistviewtest.ScrollExpandableListViewandroid:id=”@+id/cityList”android:layout_width=”match_parent”android:layout_height=”wrap_content”android:visibility=”gone”android:childDivider=”@drawable/child_bg”/></LinearLayout></ScrollView></LinearLayout>

我在布局中使用了“ScrollView”,防止一页内容过多,手机屏幕显示不下,,那么,问题就来了:ScrollView会和ExpandableListView造成冲突。所以我又自定义了一个叫做“ScrollExpandableListView”的控件,代码如下:

packagecom.example.expandablelistviewtest;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.widget.ExpandableListView;publicclassScrollExpandableListViewextendsExpandableListView{publicScrollExpandableListView(Contextcontext,AttributeSetattrs){super(context,attrs);}/*在ScrollView中嵌套使用ExpandableListView,ExpandableListView只会显示一行多一点。两者进行嵌套,即会发生冲突.需要重写OnMesure,对ListView或者GridView同样适用*/@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec,expandSpec);}}

同样做了一些有关省市的模拟数据:

packagecom.example.expandablelistviewtest;importjava.util.ArrayList;importjava.util.HashMap;publicclassProvinceData{privateArrayList<String>provinceGroupData;//定义省级组数据privateArrayList<ArrayList<String>>provinceChildrenData;//定义省级组中的子数据privateArrayList<String>cityGroupData;//定义市级组数据privateArrayList<ArrayList<String>>cityChildrenData;//定义市级组数据中的子数据privateHashMap<String,ArrayList<String>>provinceToCityMap;//创建省市的键值对publicArrayList<String>getProvinceGroupData(){provinceGroupData=newArrayList<String>();provinceGroupData.add(“省级名称”);returnprovinceGroupData;}publicArrayList<ArrayList<String>>getProvinceChildrenData(){provinceChildrenData=newArrayList<ArrayList<String>>();ArrayList<String>provinceList=newArrayList<String>();provinceList.add(“北京市”);provinceList.add(“上海市”);provinceList.add(“广东省”);provinceList.add(“浙江省”);provinceList.add(“江苏省”);provinceList.add(“湖北省”);provinceList.add(“山西省”);provinceList.add(“河北省”);provinceChildrenData.add(provinceList);returnprovinceChildrenData;}publicArrayList<String>getCityGroupData(){cityGroupData=newArrayList<String>();cityGroupData.add(“市级名称”);returncityGroupData;}publicArrayList<ArrayList<String>>getcityChildrenData(){cityChildrenData=newArrayList<ArrayList<String>>();ArrayList<String>beijingList=newArrayList<String>();beijingList.add(“海淀区”);beijingList.add(“丰台区”);beijingList.add(“昌平区”);beijingList.add(“密云县”);cityChildrenData.add(beijingList);ArrayList<String>shanghaiList=newArrayList<String>();shanghaiList.add(“嘉定区”);shanghaiList.add(“浦东新区”);cityChildrenData.add(shanghaiList);ArrayList<String>guangdongList=newArrayList<String>();guangdongList.add(“广州市”);guangdongList.add(“珠海市”);guangdongList.add(“佛山市”);guangdongList.add(“中山市”);cityChildrenData.add(guangdongList);ArrayList<String>zhejiangList=newArrayList<String>();zhejiangList.add(“杭州市”);zhejiangList.add(“宁波市”);zhejiangList.add(“嘉兴市”);cityChildrenData.add(zhejiangList);ArrayList<String>jiangsuList=newArrayList<String>();jiangsuList.add(“南京市”);jiangsuList.add(“徐州市”);jiangsuList.add(“扬州市”);cityChildrenData.add(jiangsuList);ArrayList<String>hubeiList=newArrayList<String>();hubeiList.add(“武汉市”);hubeiList.add(“宜昌市”);hubeiList.add(“荆门市”);hubeiList.add(“黄冈市”);cityChildrenData.add(hubeiList);ArrayList<String>shanxiList=newArrayList<String>();shanxiList.add(“太原市”);shanxiList.add(“大同市”);shanxiList.add(“阳泉市”);cityChildrenData.add(shanxiList);ArrayList<String>hebeiList=newArrayList<String>();hebeiList.add(“石家庄市”);hebeiList.add(“唐山市”);hebeiList.add(“保定市”);cityChildrenData.add(hebeiList);returncityChildrenData;}publicHashMap<String,ArrayList<String>>getProvinceAndCity(){ArrayList<ArrayList<String>>cityChildrenList=getcityChildrenData();provinceToCityMap=newHashMap<String,ArrayList<String>>();for(inti=0;i<provinceChildrenData.get(0).size();i++){provinceToCityMap.put(provinceChildrenData.get(0).get(i),cityChildrenList.get(i));}returnprovinceToCityMap;}}我们一直在旅行,一直在等待某个人可以成为我们旅途的伴侣,

用ExpandableListView做省市二级联动

相关文章:

你感兴趣的文章:

标签云: