Android实现省市区三级联动

所属分类: 软件编程 / Android 阅读数: 77
收藏 0 赞 0 分享

针对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) {

      }
    });
  }


}

运行结果:

 

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

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多