这是本人第一次写博客,也是本人的第一篇博客!
有什么不足之处,希望大家多多见谅、互相请教!
本人Android新手上路,大神请轻吐槽!!!!!

省市级三级联动相信大家已经很熟悉了,网购的时候选地址就要用到这个功能。
我在网上看了很多篇关于Android省市区三级联动的文章。
个人感觉理解起来比较乱,不是很清晰,所以就打算自己写一篇,希望可以帮助到大家学习。

废话不多说,进入正题!!!

首先看一下效果图

虽然UI看起来有点简陋
但不影响功能的实现哈!!!

首先我用的是Json数据,通过不断地解析数据来实现显示的。

一、在项目目录的main目录下创建assets文件夹用来保放Json全国省市区数据txt文件

二、直接上xml布局代码、布局的话没什么好说的

                                                                                            

三、定义三个列表用来分别存放省市区数据并且初始化

province = findViewById(R.id.province);        city = findViewById(R.id.city);        area = findViewById(R.id.area);        provinceList = new ArrayList<>();        cityList = new ArrayList<>();        areaList = new ArrayList<>();

四、
直接用BufferedReader读取txt文件
然后把内容用StringBuffer保存
最后用JSONArray保存这些字符串
关于Json的相关知识这里不多补充

循环遍历这个数组,读取第i个数组、并且把每个数组的名字name字段读取出来保存在一个变量里面
最后在添加到省份这个列表里面、然后创建适配器来绑定并且显示数据

        try {            InputStream inputStream =getResources().getAssets().open("City.txt");            BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));            StringBuffer stringBuffer = new StringBuffer();            String lines =bufferedReader.readLine();            while (lines != null){                stringBuffer.append(lines);                lines =bufferedReader.readLine();            }            final JSONArray Data =new JSONArray(stringBuffer.toString());            //循环这个文件数组、获取数组中每个省对象的名字            for (int i = 0; i < Data.length(); i++){                JSONObject provinceJsonObject = Data.getJSONObject(i);                String provinceName = provinceJsonObject.getString("name");                provinceList.add(provinceName);            }            //定义省份显示适配器            ArrayAdapter provinceAdapter = new ArrayAdapter<>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,provinceList);            provinceAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);            province.setAdapter(provinceAdapter);

五、上面已经完成了省的显示
接下来是市级的显示
首先对省级的下拉框设置监听事件
注意!!关键的地方来了
通过监听当前的用户所选中的省份在Json数据中的位置position
来获取当前省份所下属的所有市级并且添加到城市列表中
最后还是通过适配器来显示数据

province.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {                @Override                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {                    try {                        //根据当前位置的省份所在的数组位置、获取城市的数组                        JSONObject provinceObject = Data.getJSONObject(position);                        final JSONArray cityArray = provinceObject.getJSONArray("city");                        //更新列表数据                        if (citylist != null){                            citylist.clear();                        }                        for (int i = 0; i < cityArray.length(); i++){                            JSONObject cityObj = cityArray.getJSONObject(i);                            String cityName = cityObj.getString("name");                            citylist.add(cityName);                        }                        ArrayAdapter cityAdapter = new ArrayAdapter<>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,citylist);                        cityAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);                        city.setAdapter(cityAdapter);

六、上面完成了市级的
最后是实现地区的数据显示,其实道理和上面都一样,这里直接上代码

city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {                            @Override                            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {                                try {                                    //根据当前城市数组位置 获取地区数据                                    JSONObject cityJsonObj = cityArray.getJSONObject(position);                                    JSONArray areaJsonArray = cityJsonObj.getJSONArray("area");                                    if (arealist != null){                                        arealist.clear();                                    }                                    for (int i = 0; i < areaJsonArray.length(); i++){                                        arealist.add(areaJsonArray.getString(i));                                    }                                    ArrayAdapter areaAdapter = new ArrayAdapter<>(MainActivity.this,R.layout.support_simple_spinner_dropdown_item,arealist);                                    areaAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);                                    area.setAdapter(areaAdapter);

好啦!!!
最后附上这个项目码云地址,关于Json数据可以在里面下载:https://gitee.com/Damonnn/Android_Spinner
最终的效果如开头的效果图,希望可以帮助到一些人
有什么问题希望大家可以提出来,有什么好的建议也可以提出来
我会虚心学习改进,谢谢大家!!!

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android用SQLite存储数据详解
  5. android 使用Realm数据库
  6. 对Android中Intent的理解
  7. Android中SQLite使用
  8. Android(三) 数据存储之二 SharedPreferences
  9. 【Android(安卓)UI设计与开发】第05期:引导界面(五)实现应用程序只

随机推荐

  1. 如何给你的Android 安装文件(APK)瘦身(一)
  2. Lumia920和930对比哪个好?诺基亚Lumia920
  3. Android 官方 Training 文档学习总结系列
  4. Android(安卓)RxJava 实际应用讲解:功能防
  5. Android 实现自定义控件效果1
  6. Android手机端使用Zipalign优化apk应用程
  7. Android下的多线程
  8. android客户端和php服务简单交互
  9. Fragment和ViewPager的介绍和使用
  10. android 服务概述 本地服务示例