Android 实现Dialog省市二级联动菜单,两个简单listview达到目的

声明:本文内容思路到实现都是本人完成,如有雷同纯属巧合,省市字符串数组内容是借用了别人的(具体是谁的没记下来,搜的时候看到实现效果不太一样,就借用了这一部分,在这里表示感谢和抱歉),转载本文请注明出处。

之前搜别人的好多都没有这样效果,所以就自己写了一个,一开始想到这样写的时候,还不确定能不能达到效果,刚写出来简单模型的时候发现效果挺接近的,就慢慢改成了这样,效果感觉挺好的。
有些布局控件和变量命名很随意,不要见怪。

个人觉得这个二级联动实现比较简单,但是有局限性,第一级菜单选项很多的话会比较麻烦,实现省市县三级菜单的话就更不可行了。
其实本文主要是实现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() {
                //这个方法没用上,有两个或多个按钮的话就用上了
            }
        });
    }

以上就是全部内容了,如果帮助到大家,请留个赞和评论;
如有疑问,也可以交流交流。

猜你喜欢

转载自blog.csdn.net/weixin_42120514/article/details/81479007