多层级Spinner列表选项实时更新树形层级(选择城市)

  1 package com.example.spinnerdemo;
  2 
  3 import android.os.Bundle;
  4 import android.app.Activity;
  5 import android.view.View;
  6 import android.widget.AdapterView;
  7 import android.widget.ArrayAdapter;
  8 import android.widget.Spinner;
  9 
 10 public class MainActivity extends Activity {
 11 
 12     private Spinner provinceSpinner = null; // 省(省、直辖市)
 13     private Spinner citySpinner = null; //
 14     private Spinner countrySpinner = null; //
 15 
 16     private ArrayAdapter<String> provinceAdapter = null; //
 17     private ArrayAdapter<String> cityAdapter = null; //
 18     private ArrayAdapter<String> countryAdapter = null; //
 19 
 20     private int provincePosition = 3;
 21 
 22     // 省级选项值
 23     private String[] province = new String[] { "北京", "上海", "天津", "广东" };// ,"重庆","黑龙江","江苏","山东","浙江","香港","澳门"};
 24 
 25     // 市级选项值
 26     private String[][] city = new String[][] {
 27             { "东城区", "西城区", "崇文区", "宣武区", "朝阳区", "海淀区", "丰台区", "石景山区", "门头沟区","房山区", "通州区", "顺义区", "大兴区", "昌平区", "平谷区", "怀柔区", "密云县","延庆县" },
 28             { "长宁区", "静安区", "普陀区", "闸北区", "虹口区" },
 29             { "和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "塘沽区", "汉沽区", "大港区","东丽区" }, 
 30             { "广州", "深圳", "韶关" // ,"珠海","汕头","佛山","湛江","肇庆","江门","茂名","惠州","梅州",
 31             // "汕尾","河源","阳江","清远","东莞","中山","潮州","揭阳","云浮"
 32             } };
 33 
 34     // 区县级选项值
 35     private String[][][] country = new String[][][] 
 36             {
 37                     {   //北京
 38                         {"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},
 39                         {"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"}
 40                     },
 41                     {    //上海
 42                         {"无"},{"无"},{"无"},{"无"},{"无"}
 43                     },
 44                     {    //天津
 45                         {"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"},{"无"}
 46                     },
 47                     {    //广东
 48                         {"海珠区","荔湾区","越秀区","白云区","萝岗区","天河区","黄埔区","花都区","从化市","增城市","番禺区","南沙区"}, //广州
 49                         {"宝安区","福田区","龙岗区","罗湖区","南山区","盐田区"}, //深圳
 50                         {"武江区","浈江区","曲江区","乐昌市","南雄市","始兴县","仁化县","翁源县","新丰县","乳源县"}  //韶关
 51                     }
 52             };
 53 
 54 
 55     @Override
 56     protected void onCreate(Bundle savedInstanceState) {
 57         super.onCreate(savedInstanceState);
 58         
 59         setContentView(R.layout.activity_main);
 60 
 61         provinceSpinner = (Spinner) findViewById(R.id.spinner_province);
 62         citySpinner = (Spinner) findViewById(R.id.spinner_city);
 63         countrySpinner = (Spinner) findViewById(R.id.spinner_country);
 64 
 65         // 装载适配器和值
 66         provinceAdapter = new ArrayAdapter<String>(this,
 67                 android.R.layout.simple_spinner_item, province);
 68         provinceSpinner.setAdapter(provinceAdapter);
 69 
 70         cityAdapter = new ArrayAdapter<String>(this,
 71                 android.R.layout.simple_spinner_item, city[3]);
 72         citySpinner.setAdapter(cityAdapter);
 73 
 74         countryAdapter = new ArrayAdapter<String>(this,
 75                 android.R.layout.simple_spinner_item, country[3][0]);
 76         countrySpinner.setAdapter(countryAdapter);
 77 
 78         // 省下拉框监听
 79         provinceSpinner
 80                 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
 81 
 82                     @Override
 83                     public void onItemSelected(AdapterView<?> arg0, View arg1,
 84                             int position, long arg3) {
 85 
 86                         cityAdapter = new ArrayAdapter<String>(
 87                                 getApplication(),
 88                                 android.R.layout.simple_spinner_item,
 89                                 city[position]);
 90                         citySpinner.setAdapter(cityAdapter);
 91 
 92                         provincePosition = position; // 记录当前省级序号,留给下面修改县级适配器时用
 93                     }
 94 
 95                     @Override
 96                     public void onNothingSelected(AdapterView<?> arg0) {
 97 
 98                     }
 99 
100                 });
101 
102         // 市级下拉监听
103         citySpinner
104                 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
105 
106                     @Override
107                     public void onItemSelected(AdapterView<?> arg0, View arg1,
108                             int position, long arg3) {
109                         countryAdapter = new ArrayAdapter<String>(
110                                 getApplication(),
111                                 android.R.layout.simple_spinner_item,
112                                 country[provincePosition][position]);
113                         countrySpinner.setAdapter(countryAdapter);
114                     }
115 
116                     @Override
117                     public void onNothingSelected(AdapterView<?> arg0) {
118 
119                     }
120                 });
121     }
122 }

xml:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:background="#e0e0e0"
 6     android:orientation="horizontal" >
 7     <Spinner
 8         android:id="@+id/spinner_province"
 9         android:layout_width="0dip"
10         android:layout_weight="1"
11         android:layout_height="wrap_content" />
12 
13     <Spinner
14         android:id="@+id/spinner_city"
15         android:layout_width="0dip"
16         android:layout_weight="1"
17         android:layout_height="wrap_content" />
18 
19     <Spinner
20         android:id="@+id/spinner_country"
21         android:layout_width="0dip"
22         android:layout_weight="1"
23         android:layout_height="wrap_content" />
24 </LinearLayout>
View Code
原文地址:https://www.cnblogs.com/zzw1994/p/4976699.html