Android实现省市区三级联动

针对AdapterView的拓展使用,Spinner实现省市区的三级联动,具体内容如下

其主要是通过使用Spinner的setOnItemSelectListener来实现。

代码示例:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.example.testspinnerprovince.MainActivity"
  android:orientation="vertical">

  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:text="@string/selection"
    android:padding="6dp"/>
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="30dp"
    android:orientation="horizontal">

    <Spinner
      android:id="@+id/provinceSpinner"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"/>
    <Spinner
      android:id="@+id/citySpinner"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"/>
    <Spinner
      android:id="@+id/countySpinner"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"/>

  </LinearLayout>
  <TextView
    android:id="@+id/show"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:padding="6dp"
    android:layout_marginTop="80dp"
    android:text="@string/selected"/>

</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
  private TextView show;
  private Spinner provinceSpinner;//省级
  private Spinner citySpinner;//市级
  private Spinner countySpinner;//区级

  private String[] province = new String[]{"北京","上海","天津","广东"};
  private String[][] city = new String[][]{
      {"东城区","西城区","崇文区","宣武区","朝阳区","海淀区","丰台区","石景山区","门头沟区",
          "房山区","通州区","顺义区","大兴区","昌平区","平谷区","怀柔区","密云县","延庆县"},
  {"长宁区","静安区","普陀区","闸北区","虹口区"},
  {"和平区","河东区","河西区","南开区","河北区","红桥区","塘沽区","汉沽区","大港区","东丽区"},
  {"广州","深圳","韶关"}};
  private String[][][] county = new String[][][]{{
      //北京
      {"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},
      {"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},},{
      //上海
      {"无"},{"无"},{"无"},{"无"},{"无"},},{
      //天津
      {"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},},{
      //广东
      {"海珠区","荔湾区","越秀区","白云区","萝岗区","天河区","黄浦区","花都区","从化市","增城市"
          ,"番禺区","南沙区"},
      {"宝安区","福田区","龙岗区","罗湖区","南山区","盐田区"},
      {"武江区","浈江区","曲江区","乐昌市","南雄市","始兴县","仁化县","翁源县","新丰县","乳源县"}
  }
  };

  //Spinner想要填充肯定需要适配器
  private ArrayAdapter<String> provinceAdapter;
  private ArrayAdapter<String> cityAdapter;
  private ArrayAdapter<String> countyAdapter;
  private int provicePosition;//省级选中索引
  private int cityPosition;//市级选中索引

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initViews();//初始化
  }

  //控件初始化
  private void initViews() {
    provinceSpinner = (Spinner) findViewById(R.id.provinceSpinner);
    citySpinner = (Spinner) findViewById(R.id.citySpinner);
    countySpinner = (Spinner) findViewById(R.id.countySpinner);
    show = (TextView) findViewById(R.id.show);

    //初始化适配器及显示的内容
    provinceAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,province);
    provinceSpinner.setAdapter(provinceAdapter);

    //对省级下拉实现监听,市级下拉需要根据不同的省级显示不同内容。
    provinceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //需要在item选中省级的时候,动态的改变市级对应的显示
        cityAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item,city[position]);
        //设置二级下拉列表当中选项内容适配器
        citySpinner.setAdapter(cityAdapter);
        //记录当前的省级索引位置,留给下面修改县级进行适配使用
        provicePosition = position;
      }

      @Override
      public void onNothingSelected(AdapterView<?> parent) {

      }
    });

    //市级下拉监听
    citySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //需要在item选中市级的时候,动态的改变县级对应的显示
        countyAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item,county[provicePosition][position]);//首先确定是哪个省的。
        //设置二级下拉列表当中选项内容适配器
        countySpinner.setAdapter(countyAdapter);
        show.setText("选中的城市为:"+ province[provicePosition] + city[provicePosition][position]);
        cityPosition = position;
      }

      @Override
      public void onNothingSelected(AdapterView<?> parent) {

      }
    });

    //区级的下拉
    countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        show.setText("选中的城市为:"+ province[provicePosition] + city[provicePosition][cityPosition]
            + county[provicePosition][cityPosition][position]);
      }

      @Override
      public void onNothingSelected(AdapterView<?> parent) {

      }
    });
  }

}

运行结果:

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

(0)

相关推荐

  • Android PickerView实现三级联动效果

    GitHub有一个开源控件PickerView,可以实现三级联动的效果.虽然该控件使用非常简单,但是填充数据异常繁琐.GitHub上的Demo在填充数据的时候是一条一条地填充的,代码过于冗余.下面提供一种简便的方式来实现. (1)在app目录下新建一个assets文件夹,将province_data.xml文件复制到该文件夹下,该XML文件里保存了全国的省市县的地址数据. (2)使用SAX解析xml文件中的数据,并将数据填充到PickerView这个控件中. -ProvinceModel- pu

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

    今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为是Andriod内置的控件,google一把,发现是个github上的一个控件. 下载地址:https://code.google.com/p/android-wheel/    发现很适合做省市县三级联动就做了一个. 先看下效果图: 1.首先导入github上的wheel项目 2.新建个项目,然后选择记得右键->Properties->Android中将wheel添加为lib: 上面两个步骤是导入所有开源项目的过程了

  • Android中使用开源框架Citypickerview实现省市区三级联动选择

    1.概述 记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯一麻烦的是需要自己整理并解析省市区的xml文件,思路很简单,但是代码量相对大了些.偶然期间发现了另外一个开源组件,也就是今天要介绍的citypickerview. github地址:crazyandcoder/citypicker 2. 实现效果 下面给大家演示下实现效果: 3.   实现方法 (1)添加依赖 dependenc

  • android-wheel控件实现三级联动效果

    本文实例为大家分享了android wheel省市县三级联动效果,供大家参考,具体内容如下 在github上面有一个叫做 Android-wheel 的开源控件, 代码地址:https://github.com/maarek/android-wheel 源码下载地址:http://xiazai.jb51.net/201610/yuanma/AndroidCascadeMaster(jb51.net).rar 主界面布局 activity_main.xml <LinearLayout xmlns:

  • Android自定义WheelView地区选择三级联动

    本文实例为大家分享了WheelView地区选择三级联动的具体代码,供大家参考,具体内容如下 1. 效果 最近需要做一个地区选择的功能,但是在网上和github上找了很久都没找到满意的,然后朋友推荐了一个给我,我花了点时间把代码大致看懂并改成我想要的,并写上我的理解.效果如图: 2. 注意 a. 首先我们要明白,网上这写三级联动的demo,不管是把数据库文件放在raw还是assets中,我们都要进行复制,将这个文件复制到app目录下,即 /data/data/"+context.getPackag

  • 最好用的Android省市区三级联动选择效果

    Android省市区选择三级联动效果,一个不大不小的功能,就算你做过,但是没有相关的代码直接写,也要花掉你至少半天时间. 下面我写出我的实现过程(思路绝对清晰). 先上效果图 一.准备数据 我是用的本地的json数据(走网络的话太慢,每次都要请求),放在asserts中.格式如下: [{ "name": "河北省", "city": [ { "name": "石家庄市", "area":

  • Android日期选择器实现年月日三级联动

    最近项目里面用到了一个日期选择器,实现现在主流的WheelView滑动选择,整理了下,做了个Demo.废话不多说,直接上代码. 主布局:activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&quo

  • Android实现三级联动下拉框 下拉列表spinner的实例代码

    主要实现办法:动态加载各级下拉值的适配器 在监听本级下拉框,当本级下拉框的选中值改变时,随之修改下级的适配器的绑定值              XML布局: 复制代码 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_w

  • Android省市区三级联动控件使用方法实例讲解

    最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化.为了方便以后使用,抽离出来放在了github上WheelView.同时把其核心库放在了JCenter中了,可以直接引用.也可以参考项目中的Demo进行引用 下面介绍一下如何使用 如果用的是AndroidStudio那么直接在build.gradle文件中添加依赖: dependencies { compile 'chuck.WheelItemView:library:1.0.1' } 成功引入库之后,可以在需要弹出省

  • Android实现省市区三级联动

    针对AdapterView的拓展使用,Spinner实现省市区的三级联动,具体内容如下 其主要是通过使用Spinner的setOnItemSelectListener来实现. 代码示例: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

  • 微信小程序自定义yPicker组件实现省市区三级联动功能

    自从上一篇文章:微信小程序自定义日历组件及flex布局最后一行对齐问题分析 出来以后,有人私聊我说能不能从头分析一下我开源的自定义组件?一直没时间.这不,最近项目中有个需求是 省市区三级联动 ,我就顺便从组件库中的第一个 「扩展日期-时间picker(点此直接至GitHub,欢迎star)」组件开始说一下这两个功能的实现. 简单说一下"自定义日期-时间组件" 它的背景是项目的第一版当时发现微信小程序内置的日期组件:picker只能精确到某一天(年月日),但是我们很多时候需要年月日时分甚

  • PHP+Mysql+Ajax+JS实现省市区三级联动

    基本思想就是:在JS动态创建select控件的option,通过Ajax获取在PHP从SQL数据库获取的省市区信息,代码有点长,但很多都是类似的,例如JS中省.市.区获取方法类似,PHP中通过参数不同执行不同的select语句. index.html代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xh

  • javascript实现省市区三级联动下拉框菜单

    本文实例讲述了javascript实现省市区三级联动下拉框菜单代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title> <!-- 使用QQ的省市区数据 --> <!-- <script type="text/javascript" src="http:/

  • jquery+ajax实现省市区三级联动效果简单示例

    本文实例讲述了jquery+ajax实现省市区三级联动效果.分享给大家供大家参考,具体如下: 一直想学习下Ajax,没时间,汗,这借口太牵强了.下了点教程在手机里,翻了好几遍了,没实战一次. 最近的项目里需要Ajax实现效果,就下了个jquery,然后找了个实例,学习了一下,幡然醒悟,NND,jquery果然强大的一塌糊涂,实现Ajax简直就是不费吹灰之力.下面把学习过程跟大家分享下,虽然还没有搞清楚jquery ajax的底层相关.不管了.我们不需要去发明轮子.呵呵. 先上代码,是一个省市区三

  • 从QQ网站中提取的纯JS省市区三级联动菜单

    我发现在 http://ip.qq.com/ 的网站中有QQ自己的JS省市区三级联动.所以研究了一下.他的界面如下:  何不直接使用的数据呢? 惊喜的是QQ是使用引用外部JS来实现三级联动的.JS如下:http://ip.qq.com/js/geo.js 使用方法如下: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title> <!-- 直接使用QQ的省市区数据

  • 使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例

    使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能 要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下拉跟着变化,市级下拉变化时区下拉跟着变化. 使用chinastates表查询 Ajax加载数据 1.这是chinastates表 2.做一个简单php:Ajax_eg.php <!DOCTYPE html> <html> <head> <meta charset=&q

  • thinkPHP实现的省市区三级联动功能示例

    本文实例讲述了thinkPHP实现的省市区三级联动功能.分享给大家供大家参考,具体如下: 一张表实现省市区三级联动[3409条数据] 1. php代码: public function index(){ $province = M('Tree')->where ( array('pid'=>1) )->select (); $this->assign('province',$province); $this->display(); } public function getR

随机推荐