声明:本文内容思路到实现都是本人完成,如有雷同纯属巧合,省市字符串数组内容是借用了别人的(具体是谁的没记下来,搜的时候看到实现效果不太一样,就借用了这一部分,在这里表示感谢和抱歉),转载本文请注明出处。
之前搜别人的好多都没有这样效果,所以就自己写了一个,一开始想到这样写的时候,还不确定能不能达到效果,刚写出来简单模型的时候发现效果挺接近的,就慢慢改成了这样,效果感觉挺好的。
有些布局控件和变量命名很随意,不要见怪。
个人觉得这个二级联动实现比较简单,但是有局限性,第一级菜单选项很多的话会比较麻烦,实现省市县三级菜单的话就更不可行了。
其实本文主要是实现Dialog省市二级联动菜单,listview数据的处理并不是很好,可以使用更高效的数据加载方式,不用像我这样把数据弄的这么麻烦。特别是switch case获取城市的数组数据,太麻烦了!
先上个效果图
先上dialog布局文件 ↓
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="325dp"
android:layout_height="260dp"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="42dp"
android:background="@drawable/shape_e6e6e6_top5dp"
android:gravity="center"
android:text="选择您的现住地址"
android:textColor="@color/color333333"
android:textSize="17sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_ffffff_bottom_5dp">
<View
android:layout_width="265dp"
android:layout_height="1dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="59dp"
android:background="@color/color999999" />
<View
android:layout_width="265dp"
android:layout_height="1dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="95dp"
android:background="@color/color999999" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="111dp"
android:layout_marginTop="22dp"
android:gravity="center">
<ListView
android:id="@+id/lv_dialog1_1"
android:layout_width="55dp"
android:layout_height="match_parent"
android:background="#00000000"
android:divider="@null"
android:dividerHeight="22dp"
android:overScrollMode="never"
android:scrollbars="none" />
<ListView
android:id="@+id/lv_dialog1_2"
android:layout_width="105dp"
android:layout_height="match_parent"
android:background="#00000000"
android:divider="@null"
android:dividerHeight="22dp"
android:overScrollMode="never"
android:scrollbars="none" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="59dp"
android:background="#7fFFFFFF"
android:clickable="true" />
<View
android:layout_width="match_parent"
android:layout_height="59dp"
android:layout_marginTop="96dp"
android:background="#7fFFFFFF"
android:clickable="true" /
<Button
android:id="@+id/bt_dialog1"
android:layout_width="233dp"
android:layout_height="40dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="158dp"
android:background="@drawable/shape_bg_c24333_5dp"
android:text="确定"
android:textColor="@color/white"
android:textSize="17sp" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
item布局 ↓
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="#00000000"
android:textColor="@color/colorAccent"
android:textSize="17sp"
android:text="广东"
android:gravity="center"
>
<!--这里高度height设置小一点,让每个item划上去的时候更容易完全不可见,
可以在listview布局设置dividerHeight大一点,让第二个item刚好显示在两根线的中间,
这样的话第一个可见的item就更容易得到我们想要的结果
-->
</TextView>
几个背景图形 ↓ (颜色形状可以自行设置)
放在drawable文件夹下
//标题背景 shape_e6e6e6_top5dp
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#e6e6e6"/>
<corners android:topRightRadius="5dp"
android:topLeftRadius="5dp"/>
</shape>
// shape_ffffff_bottom_5dp
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"/>
</shape>
//按钮背景 shape_bg_c24333_5dp
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorAccent"/>
<corners android:radius="5dp"/>
</shape>
下面是省份和城市的字符串数组,放在string.xml文件里面
数组最后都加了一个空数据,是为了让本来最后一个数据可以显示在中间位置
<string-array name="province">
<item>-省份-</item>
<item>北京</item>
<item>天津</item>
<item>河北</item>
<item>山西</item>
<item>内蒙古</item>
<item>辽宁</item>
<item>吉林</item>
<item>黑龙江</item>
<item>上海</item>
<item>江苏</item>
<item>浙江</item>
<item>安徽</item>
<item>福建</item>
<item>江西</item>
<item>山东</item>
<item>河南</item>
<item>湖北</item>
<item>湖南</item>
<item>广东</item>
<item>广西</item>
<item>海南</item>
<item>重庆</item>
<item>四川</item>
<item>贵州</item>
<item>云南</item>
<item>西藏</item>
<item>陕西</item>
<item>甘肃</item>
<item>青海</item>
<item>宁夏</item>
<item>新疆</item>
<item>台湾</item>
<item>香港</item>
<item>澳门</item>
<item> </item>
</string-array>
<string-array name="def">
<item>-城市-</item>
</string-array>
<string-array name="北京">
<item>-城市-</item>
<item>东城</item>
<item>西城</item>
<item>朝阳</item>
<item>丰台</item>
<item>石景山</item>
<item>海淀</item>
<item>门头沟</item>
<item>房山</item>
<item>通州</item>
<item>顺义</item>
<item>昌平</item>
<item>大兴</item>
<item>平谷</item>
<item>怀柔</item>
<item>密云</item>
<item>延庆</item>
<item> </item>
</string-array>
<string-array name="天津">
<item>-城市-</item>
<item>和平</item>
<item>河东</item>
<item>河西</item>
<item>南开</item>
<item>河北</item>
<item>红桥</item>
<item>滨海新区</item>
<item>东丽</item>
<item>西青</item>
<item>津南</item>
<item>北辰</item>
<item>宁河</item>
<item>武清</item>
<item>静海</item>
<item>宝坻</item>
<item>蓟县</item>
<item> </item>
</string-array>
<string-array name="河北">
<item>-城市-</item>
<item>石家庄</item>
<item>唐山</item>
<item>秦皇岛</item>
<item>邯郸</item>
<item>邢台</item>
<item>保定</item>
<item>张家口</item>
<item>承德</item>
<item>沧州</item>
<item>廊坊</item>
<item>衡水</item>
<item> </item>
</string-array>
<string-array name="山西">
<item>-城市-</item>
<item>太原</item>
<item>大同</item>
<item>阳泉</item>
<item>长治</item>
<item>晋城</item>
<item>朔州</item>
<item>晋中</item>
<item>运城</item>
<item>忻州</item>
<item>临汾</item>
<item>吕梁</item>
<item> </item>
</string-array>
<string-array name="内蒙古">
<item>-城市-</item>
<item>呼和浩特</item>
<item>包头</item>
<item>乌海</item>
<item>赤峰</item>
<item>通辽</item>
<item>鄂尔多斯</item>
<item>呼伦贝尔</item>
<item>巴彦淖尔</item>
<item>乌兰察布</item>
<item>兴安</item>
<item>锡林郭勒</item>
<item>阿拉善</item>
<item> </item>
</string-array>
<string-array name="辽宁">
<item>-城市-</item>
<item>沈阳</item>
<item>大连</item>
<item>鞍山</item>
<item>抚顺</item>
<item>本溪</item>
<item>丹东</item>
<item>锦州</item>
<item>营口</item>
<item>阜新</item>
<item>辽阳</item>
<item>盘锦</item>
<item>铁岭</item>
<item>朝阳</item>
<item>葫芦岛</item>
<item> </item>
</string-array>
<string-array name="吉林">
<item>-城市-</item>
<item>长春</item>
<item>吉林</item>
<item>四平</item>
<item>辽源</item>
<item>通化</item>
<item>白山</item>
<item>松原</item>
<item>白城</item>
<item>延边</item>
<item> </item>
</string-array>
<string-array name="黑龙江">
<item>-城市-</item>
<item>哈尔滨</item>
<item>齐齐哈尔</item>
<item>鸡西</item>
<item>鹤岗</item>
<item>双鸭山</item>
<item>大庆</item>
<item>伊春</item>
<item>佳木斯</item>
<item>七台河</item>
<item>牡丹江</item>
<item>黑河</item>
<item>绥化</item>
<item>大兴安岭</item>
<item> </item>
</string-array>
<string-array name="上海">
<item>-城市-</item>
<item>黄浦</item>
<item>卢湾</item>
<item>徐汇</item>
<item>长宁</item>
<item>静安</item>
<item>普陀</item>
<item>闸北</item>
<item>虹口</item>
<item>杨浦</item>
<item>闵行</item>
<item>宝山</item>
<item>嘉定</item>
<item>浦东新区</item>
<item>金山</item>
<item>松江</item>
<item>奉贤</item>
<item>青浦</item>
<item>崇明</item>
<item> </item>
</string-array>
<string-array name="江苏">
<item>-城市-</item>
<item>南京</item>
<item>无锡</item>
<item>徐州</item>
<item>常州</item>
<item>苏州</item>
<item>南通</item>
<item>连云港</item>
<item>淮安</item>
<item>盐城</item>
<item>扬州</item>
<item>镇江</item>
<item>泰州</item>
<item>宿迁</item>
<item> </item>
</string-array>
<string-array name="浙江">
<item>-城市-</item>
<item>杭州</item>
<item>宁波</item>
<item>温州</item>
<item>嘉兴</item>
<item>湖州</item>
<item>绍兴</item>
<item>金华</item>
<item>衢州</item>
<item>舟山</item>
<item>台州</item>
<item>丽水</item>
<item> </item>
</string-array>
<string-array name="安徽">
<item>-城市-</item>
<item>合肥</item>
<item>芜湖</item>
<item>蚌埠</item>
<item>淮南</item>
<item>马鞍山</item>
<item>淮北</item>
<item>铜陵</item>
<item>安庆</item>
<item>黄山</item>
<item>滁州</item>
<item>阜阳</item>
<item>宿州</item>
<item>六安</item>
<item>亳州</item>
<item>池州</item>
<item>宣城</item>
<item> </item>
</string-array>
<string-array name="福建">
<item>-城市-</item>
<item>福州</item>
<item>厦门</item>
<item>莆田</item>
<item>三明</item>
<item>泉州</item>
<item>漳州</item>
<item>南平</item>
<item>龙岩</item>
<item>宁德</item>
<item> </item>
</string-array>
<string-array name="江西">
<item>-城市-</item>
<item>南昌</item>
<item>景德镇</item>
<item>萍乡</item>
<item>九江</item>
<item>新余</item>
<item>鹰潭</item>
<item>赣州</item>
<item>吉安</item>
<item>宜春</item>
<item>抚州</item>
<item>上饶</item>
<item> </item>
</string-array>
<string-array name="山东">
<item>-城市-</item>
<item>济南</item>
<item>青岛</item>
<item>淄博</item>
<item>枣庄</item>
<item>东营</item>
<item>烟台</item>
<item>潍坊</item>
<item>济宁</item>
<item>泰安</item>
<item>威海</item>
<item>日照</item>
<item>莱芜</item>
<item>临沂</item>
<item>德州</item>
<item>聊城</item>
<item>滨州</item>
<item>菏泽</item>
<item> </item>
</string-array>
<string-array name="河南">
<item>-城市-</item>
<item>郑州</item>
<item>开封</item>
<item>洛阳</item>
<item>平顶山</item>
<item>安阳</item>
<item>鹤壁</item>
<item>新乡</item>
<item>焦作</item>
<item>濮阳</item>
<item>许昌</item>
<item>漯河</item>
<item>三门峡</item>
<item>南阳</item>
<item>商丘</item>
<item>信阳</item>
<item>周口</item>
<item>驻马店</item>
<item>济源</item>
<item> </item>
</string-array>
<string-array name="湖北">
<item>-城市-</item>
<item>武汉</item>
<item>黄石</item>
<item>十堰</item>
<item>宜昌</item>
<item>襄阳</item>
<item>鄂州</item>
<item>荆门</item>
<item>孝感</item>
<item>荆州</item>
<item>黄冈</item>
<item>咸宁</item>
<item>随州</item>
<item>恩施</item>
<item>仙桃</item>
<item>潜江</item>
<item>天门</item>
<item>神农架</item>
<item> </item>
</string-array>
<string-array name="湖南">
<item>-城市-</item>
<item>长沙</item>
<item>株洲</item>
<item>湘潭</item>
<item>衡阳</item>
<item>邵阳</item>
<item>岳阳</item>
<item>常德</item>
<item>张家界</item>
<item>益阳</item>
<item>郴州</item>
<item>永州</item>
<item>怀化</item>
<item>娄底</item>
<item>湘西</item>
<item> </item>
</string-array>
<string-array name="广东">
<item>-城市-</item>
<item>广州</item>
<item>韶关</item>
<item>深圳</item>
<item>珠海</item>
<item>汕头</item>
<item>佛山</item>
<item>江门</item>
<item>湛江</item>
<item>茂名</item>
<item>肇庆</item>
<item>惠州</item>
<item>梅州</item>
<item>汕尾</item>
<item>河源</item>
<item>阳江</item>
<item>清远</item>
<item>东莞</item>
<item>中山</item>
<item>潮州</item>
<item>揭阳</item>
<item>云浮</item>
<item> </item>
</string-array>
<string-array name="广西">
<item>-城市-</item>
<item>南宁</item>
<item>柳州</item>
<item>桂林</item>
<item>梧州</item>
<item>北海</item>
<item>防城港</item>
<item>钦州</item>
<item>贵港</item>
<item>玉林</item>
<item>百色</item>
<item>贺州</item>
<item>河池</item>
<item>来宾</item>
<item>崇左</item>
<item> </item>
</string-array>
<string-array name="海南">
<item>-城市-</item>
<item>海口</item>
<item>三亚</item>
<item>三沙</item>
<item>五指山</item>
<item>琼海</item>
<item>儋州</item>
<item>文昌</item>
<item>万宁</item>
<item>东方</item>
<item>定安</item>
<item>屯昌</item>
<item>澄迈</item>
<item>临高</item>
<item>白沙</item>
<item>昌江</item>
<item>乐东</item>
<item>陵水</item>
<item>保亭</item>
<item>琼中</item>
<item> </item>
</string-array>
<string-array name="重庆">
<item>-城市-</item>
<item>万州</item>
<item>涪陵</item>
<item>渝中</item>
<item>大渡口</item>
<item>江北</item>
<item>沙坪坝</item>
<item>九龙坡</item>
<item>南岸</item>
<item>北碚</item>
<item>两江新区</item>
<item>万盛</item>
<item>双桥</item>
<item>渝北</item>
<item>巴南</item>
<item>长寿</item>
<item>綦江</item>
<item>潼南</item>
<item>铜梁</item>
<item>大足</item>
<item>荣昌</item>
<item>璧山</item>
<item>梁平</item>
<item>城口</item>
<item>丰都</item>
<item>垫江</item>
<item>武隆</item>
<item>忠县</item>
<item>开县</item>
<item>云阳</item>
<item>奉节</item>
<item>巫山</item>
<item>巫溪</item>
<item>黔江</item>
<item>石柱</item>
<item>秀山</item>
<item>酉阳</item>
<item>彭水</item>
<item>江津</item>
<item>合川</item>
<item>永川</item>
<item>南川</item>
<item> </item>
</string-array>
<string-array name="四川">
<item>-城市-</item>
<item>成都</item>
<item>自贡</item>
<item>攀枝花</item>
<item>泸州</item>
<item>德阳</item>
<item>绵阳</item>
<item>广元</item>
<item>遂宁</item>
<item>内江</item>
<item>乐山</item>
<item>南充</item>
<item>眉山</item>
<item>宜宾</item>
<item>广安</item>
<item>达州</item>
<item>雅安</item>
<item>巴中</item>
<item>资阳</item>
<item>阿坝</item>
<item>甘孜</item>
<item>凉山</item>
<item> </item>
</string-array>
<string-array name="贵州">
<item>-城市-</item>
<item>贵阳</item>
<item>六盘水</item>
<item>遵义</item>
<item>安顺</item>
<item>铜仁</item>
<item>黔西南</item>
<item>毕节</item>
<item>黔东南</item>
<item>黔南</item>
<item> </item>
</string-array>
<string-array name="云南">
<item>-城市-</item>
<item>昆明</item>
<item>曲靖</item>
<item>玉溪</item>
<item>保山</item>
<item>昭通</item>
<item>丽江</item>
<item>普洱</item>
<item>临沧</item>
<item>楚雄</item>
<item>红河</item>
<item>文山</item>
<item>西双版纳</item>
<item>大理</item>
<item>德宏</item>
<item>怒江</item>
<item>迪庆</item>
<item> </item>
</string-array>
<string-array name="西藏">
<item>-城市-</item>
<item>拉萨</item>
<item>昌都</item>
<item>山南</item>
<item>日喀则</item>
<item>那曲</item>
<item>阿里</item>
<item>林芝</item>
<item> </item>
</string-array>
<string-array name="陕西">
<item>-城市-</item>
<item>西安</item>
<item>铜川</item>
<item>宝鸡</item>
<item>咸阳</item>
<item>渭南</item>
<item>延安</item>
<item>汉中</item>
<item>榆林</item>
<item>安康</item>
<item>商洛</item>
<item> </item>
</string-array>
<string-array name="甘肃">
<item>-城市-</item>
<item>兰州市</item>
<item>嘉峪关</item>
<item>金昌</item>
<item>白银</item>
<item>天水</item>
<item>武威</item>
<item>张掖</item>
<item>平凉</item>
<item>酒泉</item>
<item>庆阳</item>
<item>定西</item>
<item>陇南</item>
<item>临夏</item>
<item>甘南</item>
<item> </item>
</string-array>
<string-array name="青海">
<item>-城市-</item>
<item>西宁</item>
<item>海东</item>
<item>海北</item>
<item>黄南</item>
<item>海南</item>
<item>果洛</item>
<item>玉树</item>
<item>海西</item>
<item> </item>
</string-array>
<string-array name="宁夏">
<item>-城市-</item>
<item>银川</item>
<item>石嘴山</item>
<item>吴忠</item>
<item>固原</item>
<item>中卫</item>
<item> </item>
</string-array>
<string-array name="新疆">
<item>-城市-</item>
<item>乌鲁木齐</item>
<item>克拉玛依</item>
<item>吐鲁番</item>
<item>哈密</item>
<item>昌吉</item>
<item>博尔塔拉</item>
<item>巴音郭楞</item>
<item>阿克苏</item>
<item>克孜勒苏</item>
<item>喀什</item>
<item>和田</item>
<item>伊犁</item>
<item>塔城</item>
<item>阿勒泰</item>
<item>石河子</item>
<item>阿拉尔</item>
<item>图木舒克</item>
<item>五家渠</item>
<item>北屯</item>
<item> </item>
</string-array>
<string-array name="台湾">
<item>-城市-</item>
<item>台北市</item>
<item>高雄市</item>
<item>基隆市</item>
<item>台中市</item>
<item>台南市</item>
<item>新竹市</item>
<item>嘉义市</item>
<item>台北县</item>
<item>宜兰县</item>
<item>桃园县</item>
<item>新竹县</item>
<item>苗栗县</item>
<item>台中县</item>
<item>彰化县</item>
<item>南投县</item>
<item>云林县</item>
<item>嘉义县</item>
<item>台南县</item>
<item>高雄县</item>
<item>屏东县</item>
<item>台东县</item>
<item>花莲县</item>
<item>澎湖县</item>
<item> </item>
</string-array>
<string-array name="香港">
<item>-城市-</item>
<item>中西区</item>
<item>东区</item>
<item>九龙城区</item>
<item>观塘区</item>
<item>南区</item>
<item>深水埗区</item>
<item>黄大仙区</item>
<item>湾仔区</item>
<item>油尖旺区</item>
<item>离岛区</item>
<item>葵青区</item>
<item>北区</item>
<item>西贡区</item>
<item>沙田区</item>
<item>屯门区</item>
<item>大埔区</item>
<item>荃湾区</item>
<item>元朗区</item>
<item> </item>
</string-array>
<string-array name="澳门">
<item>-城市-</item>
<item>花地玛堂区</item>
<item>圣安多尼堂区</item>
<item>大堂区</item>
<item>望德堂区</item>
<item>风顺堂区</item>
<item>氹仔</item>
<item>路环</item>
<item> </item>
</string-array>
下面是自定义Dialog1 ↓
import android.app.Dialog;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
//R文件自己导包,我删掉了R文件的导包
public class Dialog1 extends Dialog {
private Context context;
private String province;
private Dialog1.ClickListenerInterface clickListenerInterface;
private String[] provinces,cities;
private Resources res;
private String selectedProvince;
private int currentProvince,currentCity;
private ListView lv_city,lv_province;
private ArrayAdapter adapter;
//实例化Diolog1,传入参数(调用Activity的context,之前选择过得省份城市)
public Dialog1(@NonNull Context context , String province) {
super(context, R.style.MyDialog);
this.context = context;
res =context.getResources();
selectedProvince = province;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
private void init() {
//获取省份String数组
provinces=res.getStringArray(R.array.province);
//判断传进来的字符串是否为空
if (selectedProvince != null && !selectedProvince.isEmpty()){
//传进来的字符串不为空,用分隔符裁切成字符串数组
//传进来的字符串是类似这样的"北京 东城",我设置的是用两个空格分隔
String[] s = selectedProvince.split(" ");//这个分隔符要与UserInfoActivity设置的间隔符一致
//for循环对比是哪个省份,获取省份在数组中的第i位
for (int i = 0 ; i < provinces.length ; i++){
if (s[0].equals(provinces[i])){
currentProvince = i;
break;
}
}
//根据省份获取城市的字符串数组
cities = getCities(currentProvince -1);
//for循环对比是哪个城市,获取城市在数组中的第i位
for (int i = 0 ; i < cities.length ; i++){
if ( s[1] .equals(cities[i])){
currentCity = i;
break;
}
}
//设置默认的省份名称
province = s[0];
}else {
//传进来的省份城市字符串为空,则设置默认的省份为北京
cities = res.getStringArray(R.array.北京);
province = "北京";
}
//加载dialog布局
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.dialog1, null);
setContentView(view);
lv_province = view.findViewById(R.id.lv_dialog1_1);
lv_city = view.findViewById(R.id.lv_dialog1_2);
Button bt = view.findViewById(R.id.bt_dialog1);
bt.setOnClickListener(new clickListener());
//给省份listview设置适配器,并设置滑动到默认位置
// (注意:我们要让目标省份显示在中间,所以滑动到 currentProvince - 1 的位置)
lv_province.setAdapter(new ArrayAdapter<String>(context,R.layout.item_dialog_lv,provinces));
lv_province.setSelection(currentProvince - 1);
//给省城市listview设置适配器,并设置滑动到默认位置
adapter = new ArrayAdapter<String>(context,R.layout.item_dialog_lv,cities);
lv_city.setAdapter(adapter);
lv_city.setSelection(currentCity - 1);
/*
对省份listview设置滑动监听,滑动停止的时候给城市listview重新获取字符串数组,
并重新设置设置适配器(这一步应该是可以让适配器执行notifyDataSetChanged()的),
但是我对ArrayAdapter的notifyDataSetChanged()方法不太确定怎么用
*/
lv_province.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// OnScrollListener.SCROLL_STATE_IDLE:滚动停止时的状态
// OnScrollListener.SCROLL_STATE_STOUCH_SCROLL:触摸正在滚动,手指还没离开界面时的状态
// OnScrollListener.SCROLL_STATE_FLING:用户在用力滑动后,ListView由于惯性将继续滑动时的状态
if (scrollState == SCROLL_STATE_IDLE){
int position = lv_province.getFirstVisiblePosition() ;
province = provinces[position+1];
cities = getCities(position);
adapter = new ArrayAdapter<String>(context,R.layout.item_dialog_lv,cities);
lv_city.setAdapter(adapter);
// adapter.notifyDataSetChanged();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
public interface ClickListenerInterface {
//这里只设置了一个按钮,有需要可以自己添加
void doConfirm();
void doCancel();//可以设置多个方法和多个按钮对应
}
//监听点击按钮的回调
public void setClicklistener(Dialog1.ClickListenerInterface clickListenerInterface) {
this.clickListenerInterface = clickListenerInterface;
}
private class clickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.bt_dialog1:
clickListenerInterface.doConfirm();
break;
//多个按钮在这添加case
default:
break;
}
}
}
//两个get方法
public String getProvince() {
return province;
}
public String getCity() {
return cities[lv_city.getFirstVisiblePosition()+1];
}
//根据省份获取城市字符串数组
private String[] getCities(int position){
switch (position){
case 0 :
cities = res.getStringArray(R.array.北京);
break;
case 1 :
cities = res.getStringArray(R.array.天津);
break;
case 2 :
cities = res.getStringArray(R.array.河北);
break;
case 3 :
cities = res.getStringArray(R.array.山西);
break;
case 4 :
cities = res.getStringArray(R.array.内蒙古);
break;
case 5 :
cities = res.getStringArray(R.array.辽宁);
break;
case 6 :
cities = res.getStringArray(R.array.吉林);
break;
case 7 :
cities = res.getStringArray(R.array.黑龙江);
break;
case 8 :
cities = res.getStringArray(R.array.上海);
break;
case 9 :
cities = res.getStringArray(R.array.江苏);
break;
case 10 :
cities = res.getStringArray(R.array.浙江);
break;
case 11 :
cities = res.getStringArray(R.array.安徽);
break;
case 12 :
cities = res.getStringArray(R.array.福建);
break;
case 13 :
cities = res.getStringArray(R.array.江西);
break;
case 14 :
cities = res.getStringArray(R.array.山东);
break;
case 15 :
cities = res.getStringArray(R.array.河南);
break;
case 16 :
cities = res.getStringArray(R.array.湖北);
break;
case 17 :
cities = res.getStringArray(R.array.湖南);
break;
case 18 :
cities = res.getStringArray(R.array.广东);
break;
case 19 :
cities = res.getStringArray(R.array.广西);
break;
case 20 :
cities = res.getStringArray(R.array.海南);
break;
case 21 :
cities = res.getStringArray(R.array.重庆);
break;
case 22 :
cities = res.getStringArray(R.array.四川);
break;
case 23 :
cities = res.getStringArray(R.array.贵州);
break;
case 24 :
cities = res.getStringArray(R.array.云南);
break;
case 25 :
cities = res.getStringArray(R.array.西藏);
break;
case 26 :
cities = res.getStringArray(R.array.陕西);
break;
case 27 :
cities = res.getStringArray(R.array.甘肃);
break;
case 28 :
cities = res.getStringArray(R.array.青海);
break;
case 29 :
cities = res.getStringArray(R.array.宁夏);
break;
case 30 :
cities = res.getStringArray(R.array.新疆);
break;
case 31 :
cities = res.getStringArray(R.array.台湾);
break;
case 32 :
cities = res.getStringArray(R.array.香港);
break;
case 33 :
cities = res.getStringArray(R.array.澳门);
break;
}
return cities;
}
}
下面是在activity中调用
//在需要选择省份城市的地方设置监听,点击了就执行这个方法
private TextView tv_juzhu;
tv_juzhu = findViewById();
private void showDialog1(){
//实例化Dialog1
final Dialog1 dialog1 = new Dialog1(this,tv_juzhu.getText().toString());
dialog1.setCancelable(true);
dialog1.show();
dialog1.setClicklistener(new Dialog1.ClickListenerInterface() {
@Override
public void doConfirm() {
province = dialog1.getProvince();
city = dialog1.getCity();
dialog1.dismiss();
//这里设置两个空格分隔,Dialog1里面的分隔符要与这个一样
tv_juzhu.setText(province + " " +city);
}
@Override
public void doCancel() {
//这个方法没用上,有两个或多个按钮的话就用上了
}
});
}
以上就是全部内容了,如果帮助到大家,请留个赞和评论;
如有疑问,也可以交流交流。