震惊!Android原生Spinner实现三级联动
震惊!Android原生Spinner实现三级联动
三级联动json数据
点击免积分下载
android studio文件配置
对着工程目录右键 点击new -》 folder -》assets folder
将 下载好的json文件放进去
导入依赖
Gson [因为要解析json所以使用gson]
代码实现
xml
activity_test.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".TestActivity"><Spinnerandroid:id="@+id/spinner_1"android:layout_width="130dp"android:layout_height="50dp"></Spinner><Spinnerandroid:id="@+id/spinner_2"android:layout_width="130dp"android:layout_height="50dp"></Spinner><Spinnerandroid:id="@+id/spinner_3"android:layout_width="130dp"android:layout_height="50dp"></Spinner>
</LinearLayout>
item_select.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="45dp"android:background="#fff"android:textSize="14dp"android:textColor="#000"android:gravity="center"/>
TestActivity.java
package com.robot.pk10;import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;import androidx.appcompat.app.AppCompatActivity;import com.google.gson.Gson;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;public class TestActivity extends AppCompatActivity {String[]p = new String[31];String[][] c = new String[31][200];String[][][] a = new String[31][200][300];int index2 = 0;private Spinner spinner1;private Spinner spinner2;private Spinner spinner3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 初始化setContentView(R.layout.activity_test);spinner1 = findViewById(R.id.spinner_1);spinner2 = findViewById(R.id.spinner_2);spinner3 = findViewById(R.id.spinner_3);// 读取json文件read();// 设置适配器spinner1.setAdapter(new ArrayAdapter<String>(this,R.layout.item_select,p));spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {// 下拉框选中事件index2 = i;List<String> box = new ArrayList<String>(Arrays.asList(c[i]));box.removeIf(Objects::isNull);spinner2.setAdapter(new ArrayAdapter<String>(TestActivity.this,R.layout.item_select,box));}@Overridepublic void onNothingSelected(AdapterView<?> adapterView) {}});spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {List<String> box = new ArrayList<String>(Arrays.asList(a[index2][i]));box.removeIf(Objects::isNull);spinner3.setAdapter(new ArrayAdapter<String>(TestActivity.this,R.layout.item_select,box));}@Overridepublic void onNothingSelected(AdapterView<?> adapterView) {}});}public void read(){// 设置缓冲区byte []array = new byte[1024*100];int count =0;String word;StringBuffer sb = new StringBuffer();try {// 打开文件以流的方式打开InputStream stream = this.getApplicationContext().getAssets().open("place.txt");count = stream.read(array);while(count>0){word = new String(array, 0, count);sb.append(word);count = stream.read(array);}} catch (IOException e) {e.printStackTrace();}// 将json文件解析成ListList list = new Gson().fromJson(sb.toString(), List.class);int pIndex = 0; // 省索引int cIndex = 0; // 城市索引int aIndex = 0; // 区索引// 遍历for (Object o : list) {Map pMap = (Map) o;// 取出省的名字String pName = (String) pMap.get("provinceName");p[pIndex] = pName;// 取出城市listList pList = (List) pMap.get("mallCityList");for (Object o1 : pList) {// 二级遍历Map cMap = (Map) o1;String cName = (String) cMap.get("cityName");List cList = (List) cMap.get("mallAreaList");c[pIndex][cIndex] = cName;for (Object o2 : cList) {// 三级遍历Map aMap = (Map) o2;String aName = (String) aMap.get("areaName");a[pIndex][cIndex][aIndex] = aName;aIndex++;}cIndex++;// 将aIndex变成0进行下一次循环aIndex=0;}pIndex++;// 将cIndex变成0进行下一次循环cIndex=0;}}
}
震惊!Android原生Spinner实现三级联动相关推荐
- js原生,省市区三级联动插件
js原生,省市区三级联动插件 <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- 原生js写三级联动 java_原生js三级联动的简单实现代码
本文实例为大家分享了js查询天气应用,供大家参考,具体内容如下 实现功能:打开网页时显示用户所在城市的天气状况,在输入框输入城市可查询其它城市. 实现过程:先调用百度地图的API来获取用户所在的城市, ...
- 实验有效的js原生前端 全国三级联动
这是我的目录 平级 注意要在一个级别 记录的笔记,当初记录在word文档 侵权就删哈 第二个亲测 有用的三级联动 intextHtml.html <!doctype html> <h ...
- 原生JS写三级联动 --省--市--区
效果如下: css代码 <style>select{width: 100px;height: 30px;} </style> html代码 <div id="b ...
- 插件 原生js 省市区 三级联动 源码
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...
- android studio 测试地址三级联动的时候 json数据太长 提示错误: 常量字符串过长
在项目中应用地址三级联动的时候 因为测试给了一大窜的json数据 就在项目中创建了一个常量 保存这个json 然后在专程bean 去应用 但是提示错误: 常量字符串过长 于是该用jso ...
- 原生js实现三级联动
学习 自 于 http://blog.csdn.net/Elenal/article/details/51493510 <!DOCTYPE html> <html lang=&quo ...
- 原生js省市区三级联动
html模板 <form class="mainLeft" onsubmit="formSubmit(event)"><select id=& ...
- Android 之省市县三级联动XML文件
<?xml version="1.0" encoding="utf-8"?> <citylist><p p_id = " ...
最新文章
- Python入门100题 | 第066题
- 让产品经理GC的文本段落两端对齐css
- 使用Azure人脸API对图片进行人脸识别
- android 广播 关闭对话框,Android 对话框、信息提示和菜单
- centos 6.x下jira显示饼图乱码解决方法
- javaweb环境的配置 以及tomcat的安装
- python爬取genek视频_【Python】爬虫(Xpath):批量爬取站长免费简历
- Linux学习笔记总结
- EDEM创建用于模拟颗粒工厂的多边形后,选中多边形视图中不显示红色多边形
- bootstrap collapse切换改变图标
- Mac下用android studio创建安卓模拟器
- 按键精灵实现验证码识别
- geopandas和shapely使用(使用pyproj进行坐标转换)
- 《论语》全译——公冶长篇第五
- 回首神仙地,还道人间好
- 基于国服DOTA2的反和谐vpk
- Git入门到精通(大全)
- 关于mysql注入说法正确的是_1. 在 Spring中,下列关于 依赖注入 的 说法 , 正确的是( ) 。_学小易找答案...
- TRMM降水数据下载步骤
- openPOWERLINK开源POWERLINK协议栈说明文档中文非官方翻译