Android实现三级联动下拉框 下拉列表spinner

这篇博客介绍了如何在Android中实现省、市、县三级联动的下拉框(spinner),通过动态加载各级适配器,并在选中值改变时更新下级适配器。XML布局和获取选中值的方法也在内容中给出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Android实现(省、市、县)三级联动下拉框 下拉列表spinner

主要实现办法:动态加载各级下拉值的适配器

在监听本级下拉框,当本级下拉框的选中值改变时,随之修改下级的适配器的绑定值







































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= "wrap_content"
  5. android:orientation= "horizontal"
  6. android:padding= "8dp" >
  7. <Spinner
  8. android:id= "@+id/spin_province"
  9. android:layout_width= "80dp"
  10. android:layout_height= "wrap_content" />
  11. <Spinner
  12. android:id= "@+id/spin_city"
  13. android:layout_width= "112dp"
  14. android:layout_height= "wrap_content" />
  15. <Spinner
  16. android:id= "@+id/spin_county"
  17. android:layout_width= "100dp"
  18. android:layout_height= "wrap_content" />
  19. </LinearLayout>


实现代码:



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



要获取下拉框spinner中选中的值,用下面这方法就OK了

provinceSpinner.getSelectedItem().toString();

citySpinner.getSelectedItem().toString()

countySpinner.getSelectedItem().toString()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值