Android实现多层级Spinner列表选项实时更新树形层级

运行结果如图:




Java代码:

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

    布局文件:

    [html] view plain copy
    1. <LinearLayoutxmlns: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. <Spinner
    13. android:id="@+id/spinner_city"
    14. android:layout_width="0dip"
    15. android:layout_weight="1"
    16. android:layout_height="wrap_content"/>
    17. <Spinner
    18. android:id="@+id/spinner_country"
    19. android:layout_width="0dip"
    20. android:layout_weight="1"
    21. android:layout_height="wrap_content"/>
    22. </LinearLayout>

更多相关文章

  1. Android中的Menu菜单小解
  2. Android开发实践:如何设置NDK的编译选项
  3. Android:实现TabWidget选项卡按钮在屏幕下方
  4. android window类的解释及软输入法模式选项:
  5. android 添加触摸反馈
  6. No cached version of com.android.tools.build:gradle:3.6.3 av
  7. 如何发布android应用程序
  8. 【Android】Android中选项菜单(OptionMenu)的创建
  9. Android(安卓)SDK Manager国内下载缓慢的问题

随机推荐

  1. [Android]设置Activity为全屏显示的两种
  2. 【30篇突击 android】源码统计二
  3. Android(安卓)studio编译时出现aapt.exe
  4. Android(安卓)Activity界面切换添加动画
  5. 文件的读写操作
  6. Android设计和开发系列第二篇:Action Bar(
  7. Android获取本机电话号码的简单方法
  8. android 中禁止输入特殊字符小结
  9. Android(安卓)Binder进程间通信-ServiceM
  10. 升级到Android(安卓)Studio 3.2.1 ,报 Cou