Android实现联动下拉框二级地市联动下拉框功能

日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级联动下拉框用作回顾及分享给求知的新手。

思路/步骤:

在实现联动下拉框之前,我们先对用到的ArrayAdapter和数据的封装作必要的了解,Android 中提供了很多适配器的实现类,其中ArrayAdapter就其中之一。它可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入。如:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
  getApplicationContext(),
  R.array.province,
   android.R.layout.simple_spinner_item);

ArrayAdapter中比较常用的泛型是String,但此处用了CharSequence(字符序列),通过指定泛型来装配适合的数据类型。

这段代码中有三个参数:

第一个参数Context是上下文,就是当前的Activity。
第二个参数是数据来源,R.array.province是存储在xml文件中的数据。
第三个参数是Android SDK中内置的一个TextView。(此xml文件中只有一个TextView)。

通过创建一个ArrayAdapter处理存储在xml中的省份地市数据,用Spinner控件处理ArrayAdapter处理好的数据,用TextView将数据显示出来形成一个list供用户点击选择。

主要实现代码: MainActivity.java

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends Activity {
 Spinner spinner1, spinner2;//声明两个下拉框
 String City, Province;
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 spinner1 = (Spinner) findViewById(R.id.spinner1);//绑定ID
 spinner2 = (Spinner) findViewById(R.id.spinner2);//绑定ID
 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.province,
  android.R.layout.simple_spinner_item);//创建资源
 spinner1.setAdapter(adapter);//装配数据
 spinner1.setOnItemSelectedListener(new provinceClickListen());//监听事件
 spinner2.setOnItemSelectedListener(new CityClickListen());//监听事件
 }
class provinceClickListen implements OnItemSelectedListener {
 public void onItemSelected(AdapterView<?> parent, View v, int i, long l) {
  Spinner spinner = (Spinner) parent;
  String pro = (String) spinner.getItemAtPosition(i);//获取当前选中项
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.def,
   R.layout.item);//初始化
  Province = spinner1.getSelectedItem().toString();//当前选中的省份
  /** 根据省份,装配地市数据**/
  if (pro.equals("北京")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.北京, R.layout.item);
  } else if (pro.equals("天津")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.天津, R.layout.item);
  } else if (pro.equals("河北")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.河北, R.layout.item);
  } else if (pro.equals("山西")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.山西, R.layout.item);
  } else if (pro.equals("内蒙古")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.内蒙古, R.layout.item);
  } else if (pro.equals("辽宁")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.辽宁, R.layout.item);
  } else if (pro.equals("吉林")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.吉林, R.layout.item);
  } else if (pro.equals("黑龙江")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.黑龙江, R.layout.item);
  } else if (pro.equals("上海")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.上海, R.layout.item);
  } else if (pro.equals("江苏")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.江苏, R.layout.item);
  } else if (pro.equals("浙江")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.浙江, R.layout.item);
  } else if (pro.equals("安徽")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.安徽, R.layout.item);
  } else if (pro.equals("福建")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.福建, R.layout.item);
  } else if (pro.equals("江西")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.江西, R.layout.item);
  } else if (pro.equals("山东")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.山东, R.layout.item);
  } else if (pro.equals("河南")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.河南, R.layout.item);
  } else if (pro.equals("湖北")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.湖北, R.layout.item);
  } else if (pro.equals("湖南")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.湖南, R.layout.item);
  } else if (pro.equals("广东")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.广东, R.layout.item);
  } else if (pro.equals("广西")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.广西, R.layout.item);
  } else if (pro.equals("海南")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.海南, R.layout.item);
  } else if (pro.equals("重庆")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.重庆, R.layout.item);
  } else if (pro.equals("四川")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.四川, R.layout.item);
  } else if (pro.equals("贵州")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.贵州, R.layout.item);
  } else if (pro.equals("云南")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.云南, R.layout.item);
  } else if (pro.equals("西藏")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.西藏, R.layout.item);
  } else if (pro.equals("陕西")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.陕西, R.layout.item);
  } else if (pro.equals("甘肃")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.甘肃, R.layout.item);
  } else if (pro.equals("青海")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.青海, R.layout.item);
  } else if (pro.equals("宁夏")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.宁夏, R.layout.item);
  } else if (pro.equals("新疆")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.新疆, R.layout.item);
  } else if (pro.equals("台湾")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.台湾, R.layout.item);
  } else if (pro.equals("香港")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.香港, R.layout.item);
  } else if (pro.equals("澳门")) {
  adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.澳门, R.layout.item);
  }
  spinner2.setAdapter(adapter);//装配地市数据
 }
 public void onNothingSelected(AdapterView<?> parent) {

 }
 }
 class CityClickListen implements OnItemSelectedListener {

 public void onItemSelected(AdapterView<?> parent, View v, int i, long l) {
  City = spinner2.getSelectedItem().toString();//当前选中的地市
  if (City.equals("-城市-")) {//当前还没选择地市
  } else {
  Toast.makeText(getApplicationContext(), Province+"省"+City, Toast.LENGTH_LONG).show();//Toast显示选中的省份城市
  }
 }
 public void onNothingSelected(AdapterView<?> parent) {}
 }
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.main, menu);
 return true;
 }
}

此外还有布局文件: activity_main.xml

<LinearLayout xmlns: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"
  android:orientation="horizontal"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".MainActivity" >
  <TextView
    android:id="@+id/province"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="省份:" />
  <Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />
  <TextView
    android:id="@+id/city"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="城市:" />
  <Spinner
    android:id="@+id/spinner2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />
</LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
  <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner_item"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:text="名称"
    android:textColor="#000"
    android:textSize="16dp"/>

实现效果如下:





总结

以上所述是小编给大家介绍的Android实现联动下拉框二级地市联动下拉框功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • android用PopWindow做下拉框实例代码

    最近在做下拉框,本来想用spinner,可是spinner达不到项目要求,跟同学同事问了一圈,都在用popwindow,网上看了一下,popwindow挺简单的,可定制性挺强的,符合我的要求,所以,借鉴网上看的代码,自己撸了一遍.写篇博客以防忘记. 首先,先写个自定义布局,代码如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sche

  • Android进阶之Spinner下拉框的使用方法

    Spinner有俩种实现方式,除去存储数据与读取数据不同的话,其他并没有什么区别 Effect : 第一种: 在Res目录下,找到values文件夹下arrays.xml进行资源存储 <string-array name="state"> <item >今日</item> <item >昨日</item> <item >本周</item> <item >上周</item> <

  • Android使用Spinner实现城市级联下拉框

    最近写一个使用Spinner实现城市级联下拉框的Dome,现在总结一下,第一次写博客,互相学习. activity_main.xml里面有三个Spinner <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_

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

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

  • Android使用 Spinner控件实现下拉框功能

    Spinner是android的一种控件,用它我们可以实现下拉框. 我们先来看一下效果图 这是一个很简单的功能,上面一个TextView,下面一个Spinner,TextView用于显示Spinner选择的选项. 下面我们就来看一下实现吧. 首先,我们先在xml文件中将spinner写出 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://s

  • Android Studio绑定下拉框数据详解

    效果显示: 1.页面xml代码(项目的代码,直接复制会有错,自己修改一下就好) <TextView android:id="@+id/consultation_tv_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/consultation_et_doctor&qu

  • Android下拉框PopupWindow使用详解

    本文实例为大家分享了Android下拉框PopupWindow展示的具体代码,供大家参考,具体内容如下 activity_main.xml布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_paren

  • Android中Spinner(下拉框)控件的使用详解

    android给我们提供了一个spinner控件,这个控件主要就是一个列表,那么我们就来说说这个控件吧,这个控件在以前的也看见过,但今天还是从新介绍一遍吧. Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器.Spinner是View类得一个子类. 1.效果图 2.创建页面文件(main.xml) <Spinner android:id="@+id/spinner1" and

  • Android第三方开源下拉框NiceSpinner使用详解

    android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Android原生提供的下拉框Spinner所提供的设计样式,而改用自定制或者第三方设计的下拉框Spinner. NiceSpinner是一个第三方开源的下拉框Spinner,其在github上的项目主页是:https://github.com/arcadefire/nice-spinner  NiceSpinner原设计效果如动图所示: 但是通常开发者对于可能还需要对

  • Android实现联动下拉框二级地市联动下拉框功能

    日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级联动下拉框用作回顾及分享给求知的新手. 思路/步骤: 在实现联动下拉框之前,我们先对用到的ArrayAdapter和数据的封装作必要的了解,Android 中提供了很多适配器的实现类,其中ArrayAdapter就其中之一.它可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入.如: ArrayAdapter<CharSequen

  • js实现的下拉框二级联动效果

    本文实例讲述了js实现的下拉框二级联动效果.分享给大家供大家参考,具体如下: <script language="JavaScript" type="text/javascript"> <!-- /* * 说明:将指定下拉列表的选项值清空 * 转自:Gdong Elvis ( http://www.gdcool.net ) * * @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须 */ fun

  • C# MVC 使用LayUI实现下拉框二级联动的功能

    一.layui.use 1.LayUI的官方使用文档:https://www.layui.com/doc/ 2.layui的内置模块不是默认就加载好的,必须要执行启动模块的这种方法后模块才会加载: 3.layui.use就是一种加载模块的方式. 如下代码: //LayUI渲染以及启动模块 layui.use(['form', 'layedit', 'laydate'], function () { var form = layui.form,//获取form模块 layer = layui.la

  • vue实现下拉框二级联动效果的实例代码

    1.实现效果 2.后端返回的数据格式 "list": [ { "id": "1178214681118568449", "title": "后端开发", "children": [ { "id": "1178214681139539969", "title": "Java" }, { "id&quo

  • 多级联动下拉选择框,动态获取下一级

    多级联动下拉选择框,动态获取下一级,每一级数据为XML,可支持无限级(浏览器端需要Microsoft.XMLDOM支持) 项目需要,一个材料类别表,三级,总共有7000多条记录,如果一次获取会很慢的,所以就是用了动态读取,每次就读一级,且服务器端使用了缓存,效率还不错. HTML代码如下: <select name="MaterialClass1" ChildSelectName="MaterialClass2"></select><s

  • js下拉选择框与输入框联动实现添加选中值到输入框的方法

    本文实例讲述了js下拉选择框与输入框联动实现添加选中值到输入框的方法.分享给大家供大家参考.具体如下: 这里演示js下拉选择框与输入框联动,直接添加选中值到输入框中的效果.这种效果相信不少朋友见到过吧,省去用户输入的麻烦,这里使用JS直接将值赋予输入框,了解原理之后,可灵活运用,扩展出更多的特效来. 运行截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-select-value-to-input-codes/ 具体代码如下: <html> <

  • 实时监控input框,实现输入框与下拉框联动的实例

    如图: html代码 <tr> <th scope="row">奖励类型:</th> <td><input value="" type="text" name="item" id="reward" style="width: 60px;height: 20px;" placeholder="输入关键字" />

  • 基于jQuery Ajax实现下拉框无刷新联动

    本文实例为大家分享了jQuery Ajax实现下拉框无刷新联动的具体代码,供大家参考,具体内容如下 HTML代码: @{ Layout = null; } @using DAL; @using System.Data; @{ AreaDal areaDal = new AreaDal(); string areaId = ViewBag.areaId; DataRow drArea = areaDal.GetArea(areaId); string countyId = drArea == nu

  • VUE多个下拉框实现双向联动效果

    本文实例为大家分享了VUE多个下拉框实现双向联动的具体代码,供大家参考,具体内容如下 一.前言 在开发前端页面的时候,常常需要写下拉框,普通常见的下拉框有在页面写死固定值的下拉框,有通过调用后台接口服务而获取的值列表等.无论是原始的jsp页面html页面等,还是现在流行的vue angluar.js等,逻辑都是一样.本文讲解VUE页面中,多个下拉框如何实现双向联动效果. 二.代码示例 2.1 在vue页面的<el-form 表单里填充两个<el-col :span="12"

  • Android RecyclerView 上拉加载更多及下拉刷新功能的实现方法

    RecyclerView 已经出来很久了,但是在项目中之前都使用的是ListView,最近新的项目上了都大量的使用了RecycleView.尤其是瀑布流的下拉刷新,网上吧啦吧啦没有合适的自己总结了一哈. 先贴图上来看看: 使用RecyclerView实现上拉加载更多和下拉刷新的功能我自己有两种方式: 1.使用系统自带的Android.support.v4.widget.SwipeRefreshLayout这个控价来实现. 2.自定义的里面带有RecyleView的控件. 使用RecycleVie

随机推荐