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_parent"
  android:layout_height="match_parent"
  android:background="@color/white"
  android:orientation="horizontal"
  tools:context=".MainActivity"> 

  <Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" /> 

  <Spinner
    android:id="@+id/spinner2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:visibility="invisible" /> 

  <Spinner
    android:id="@+id/spinner3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:visibility="invisible" /> 

</LinearLayout> 

Spinner的每一个item布局,里面只有一个TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="@color/white"
  android:gravity="center"
  android:orientation="horizontal"
  android:padding="5dp"> 

  <TextView
    android:id="@+id/txt_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="名称"
    android:textSize="16dp" />
</LinearLayout> 

下面是SpinnerAdapter,一般会用到Adapter的有如下几个控件

(1)列表视图控件-ListView
(2)缩略图浏览器控件-Gallery
(3)网格控件-GridView
(4)下拉列表控件-Spinner
(5)自动提示文本框-AutoCompleteTextView
(6)支持展开/收缩功能的列表控件-ExpandableListView
适配器的作用是用来处理数据并将数据绑定到AdapterView上,是AdapterView视图与与数据之间的一个桥梁。

/**
 * @author: xiaolijuan
 * @description: Spinner适配器
 * @projectName: SpinnerProject
 * @date: 2015-10-18
 * @time: 00:19
 */
public class SpinnerAdapter extends BaseAdapter {
  private Context context;
  private String[] array;
  private int layoutId; 

  /**
   * 构造方法
   * @param context 上下文对象
   * @param array 数组
   * @param layoutId 布局Id
   */
  public SpinnerAdapter(Context context, String[] array, int layoutId) {
    this.context = context;
    this.array = array;
    this.layoutId = layoutId;
  } 

  /**
   * 获取Item总数
   * @return
   */
  @Override
  public int getCount() {
    return array.length;
  } 

  /**
   * 获取一个Item对象
   * @param position
   * @return
   */
  @Override
  public Object getItem(int position) {
    return array[position];
  } 

  /**
   * 获取指定item的ID
   * @param position
   * @return
   */
  @Override
  public long getItemId(int position) {
    return position;
  } 

  /**
   * 绘制的内容均在此实现
   * @param position position就是位置从0开始
   * @param convertView convertView是Spinner中每一项要显示的view
   * @param parent parent就是父窗体了,也就是Spinner
   * @return
   */
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View item = convertView != null ? convertView : View.inflate(context, layoutId, null);
    TextView txt_name = (TextView) item.findViewById(R.id.txt_name);
    txt_name.setText(array[position]);
    return item;
  }
}

java 代码:注释写的很清楚

/**
 * 使用Spinner实现城市级联下拉框
 * Spinner最简单使用方式步骤如下:
 * 第一步:在布局文件中添加Spinner控件。
 * 第二步:在Acitvity中通过id找到它。
 * 第三步:给Spinner绑定一个适配器。
 * 第四步:绑定监听器就可以用了。
 */
public class MainActivity extends Activity {
  private Spinner spinner1, spinner2, spinner3; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner2 = (Spinner) findViewById(R.id.spinner2);
    spinner3 = (Spinner) findViewById(R.id.spinner3); 

    //加载省份列表
    loadProvince();
    //设置spinner1的监听事件
    spinner1.setOnItemSelectedListener(new Spinner1ClickListener());
    //加载城市列表
    loadCity();
    //设置spinner2的监听事件
    spinner2.setOnItemSelectedListener(new Spinner2ClickListener());
    //加载区域列表
    loadGZArea();
    //设置spinner3的监听事件
    spinner3.setOnItemSelectedListener(new Spinner3ClickListener());
  } 

  /**
   * 加载省份列表
   */
  public void loadProvince() {
    String[] array1 = new String[]{"请选择", "广东省"};
    SpinnerAdapter adapterOne = new SpinnerAdapter(this, array1, R.layout.activity_item);
    spinner1.setAdapter(adapterOne);
  } 

  /**
   * 加载城市列表
   */
  public void loadCity() {
    String[] array2 = new String[]{"请选择", "广州市", "深圳市"};
    SpinnerAdapter modelTwo = new SpinnerAdapter(this, array2, R.layout.activity_item);
    spinner2.setAdapter(modelTwo);
  } 

  /**
   * 加载广州区域列表
   */
  public void loadGZArea() {
    String[] array3 = new String[]{"请选择", "天河区", "越秀区", "荔湾区", "海珠区", "萝岗区", "白云区", "黄埔区", "花都区"};
    SpinnerAdapter modelThree = new SpinnerAdapter(this, array3, R.layout.activity_item);
    spinner3.setAdapter(modelThree);
  } 

  /**
   * 加载深圳区域列表
   */
  public void loadSZArea() {
    String[] array3 = new String[]{"请选择", "龙岗区", "南山区", "福田区", "罗湖区", "盐田区", "宝安区"};
    SpinnerAdapter modelThree = new SpinnerAdapter(this, array3, R.layout.activity_item);
    spinner3.setAdapter(modelThree);
  } 

  /**
   * Spinner1点击事件
   */
  public class Spinner1ClickListener implements AdapterView.OnItemSelectedListener { 

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
      String str = (String) adapterView.getItemAtPosition(i);
      //判断是否选择城市,如果没有选择那么就隐藏Spinner2,Spinner3两个下拉框,否则显示Spinner2下拉框,继续隐藏Spinner3
      if (str.equals("请选择")) {
        spinner2.setVisibility(View.INVISIBLE);
        spinner3.setVisibility(View.INVISIBLE);
      } else {
        spinner2.setVisibility(View.VISIBLE); 

        //将第二个下拉框的选项重新设置为选中“请选择”这个选项。
        spinner2.setSelection(0);
      } 

      Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
    } 

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

    }
  } 

  /**
   * Spinner2点击事件
   */
  public class Spinner2ClickListener implements AdapterView.OnItemSelectedListener { 

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
      String str = (String) adapterView.getItemAtPosition(i);
      if (str.equals("请选择")) {
        spinner3.setVisibility(View.INVISIBLE);
      } else {
        //显示第三个Spinner3
        spinner3.setVisibility(View.VISIBLE); 

        if (str.equals("深圳市")) {
          //重新加载深圳区域列表
          loadSZArea();
        } else if (str.equals("广州市")) {
          //重新加载广州区域列表
          loadGZArea();
        }
      }
      Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
    } 

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

    }
  } 

  /**
   * Spinner3点击事件
   */
  public class Spinner3ClickListener implements AdapterView.OnItemSelectedListener { 

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
      String str = (String) adapterView.getItemAtPosition(i);
      Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
    } 

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

    }
  }
} 

下面是布局的效果图

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

您可能感兴趣的文章:

  • Android进阶之Spinner下拉框的使用方法
  • Android第三方开源下拉框NiceSpinner使用详解
  • Android中Spinner(下拉框)控件的使用详解
  • Android实现三级联动下拉框 下拉列表spinner的实例代码
  • android 之Spinner下拉菜单实现级联
(0)

相关推荐

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

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

  • 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下拉菜单实现级联

    效果图如下: 默认第一次加载 选择原始队列: 级联效果图: 关键代码给下拉列表选中事件监听绑定Id : 复制代码 代码如下: int pos = firsthand_dlbh_pinner.getSelectedItemPosition();firsthand_pdbh_adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, queu_info[pos]);firsthand_pdbh_

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

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

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

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

  • 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控件实现下拉框功能

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

  • js实现全国省份城市级联下拉菜单效果代码

    本文实例讲述了js实现全国省份城市级联下拉菜单效果代码.分享给大家供大家参考.具体如下: 这是一个大家都知道的网页小功能,很常见,全国省份与城市级联菜单,采用Select下拉的方式选择数据,不过现在很多都Ajax了,貌似这种老形式已经过时了,不过在兼容性方面,仍然是不落后的. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-conv-city-xl-menu-style-codes/ 具体代码如下: <!DOCTYPE html PUBLI

  • Vue.js 2.0中select级联下拉框实例

    在网上搜索了Vuejs2.0 动态级联select许久未果,决定自己总结一下自己的经验,有关select在Vue.js 2.0版本中的应用.首先我先说一下的我使用的技术,我参考了网上成熟的经验,选择以Vue.js 2.0+Vue-router+Vuex的全家桶. select首先要区分单选和多选,v-model在select单选和多选上有区别.     select单选实例: <select v-model="fruit"> <option selected valu

  • javascript基于DOM实现省市级联下拉框的方法

    本文实例讲述了javascript基于DOM实现省市级联下拉框的方法.分享给大家供大家参考.具体实现方法如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>省市级联下拉框</title

  • 基于jquery的无限级联下拉框js插件

    灵活性方面考虑了比较多的方面,提供了几个重要的配置方便在各类环境下使用,欢迎各位童鞋使用,源码完全开放.开发这个插件的缘于前段时间维护一个4级级联下拉框被里面200行代码及复杂的结构和bug所郁闷(之所以这么多代码是因为该级联下拉框有时只出现2个或3个),想到这类的需求其实经常都能遇到,jquery里没有这样比较好的插件,索性自己开发个.源代码并不复杂,稍微复杂的地方在第二个插件使用了缓存,造成理解起来十分困难,后面会做些解释. 插件一:适合在不与服务器进行AJAX交互情况使用,需预先将所有下拉

  • ASP.NET实现级联下拉框效果实例讲解

    用ASP.NET控件实现部门和员工的联动,参考过程如下 效果图: Default.aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/199

  • php实现三级级联下拉框

    这是我在网上查找到的php实现三级级联下拉框的资料,共享个大家,大家一起进步,具体内容如下 index.php: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>Ajax联动菜单</title> <script language="javascript"

  • jQuery实现级联下拉框实战(5)

    今天来完成jQuery实战的级联下拉框效果.效果功能如下: 页面默认只提供汽车厂商,当选择了具体的某品牌汽车,汽车类型下拉框就会动态的显示出来,选择对应的类型,然后出来该汽车类型对应的轮胎类型下拉框显示出来,选中轮胎类型,页面的正中间会显示出汽车的图片. 思路分析如图: 建立我们的html页面,程序清单如下: 代码清单1.1: chainSelect.jsp <body> <div class="loading"> <p><img src=&q

  • JQuery实现级联下拉框效果实例讲解

    用JQuery和select来实现汽车厂商和汽车类型的联动,参考过程如下 效果图: 逻辑分析图: html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&

随机推荐