您的位置:首页 > 移动开发 > Android开发

Android中使用Spinner来实现图标文字并存的二级联动

2017-06-11 16:47 549 查看
安卓中实现二级联动的样子

效果图:



实现思路:

通过spinner控件,在java代码中去把你要展示的信息存放到map集合中,接着设置适配器,设置省的监听事件,根据键去拿值,再次设置适配器

代码:

activity_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<!--TextView标签与Spinner标签-->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="省份:"
/>
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/s_spinner_spinner1"
></Spinner>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="城市:"
/>
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/s_spinner_spinner2"
></Spinner>
</LinearLayout>SpinnerActivity:
package com.example.g160628_android07_widget;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Created by Administrator on 2017/6/11.
*/

public class SpinnerActivity extends AppCompatActivity{

private Spinner s_spinner_spinner1;//省的Spinner
private Spinner s_spinner_spinner2;//市的Spinner
private SimpleAdapter adapter1;//省的SimpleAdapter适配器
private SimpleAdapter adapter2;//市的SimpleAdapter适配器
private Map<Object, List> map;//用来装所有图标集合的map集合
private List<Map<String, Object>> list_pro;//省的集合

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);

//实例化一个Map<Object, List>集合
map = new HashMap<>();

//配对省市的Spinner
s_spinner_spinner1 = (Spinner) findViewById(R.id.s_spinner_spinner1);
s_spinner_spinner2 = (Spinner) findViewById(R.id.s_spinner_spinner2);

//省的数组
String[] provinces={"湖南省","广东省","云南省"};
//图标,通过从drawable中获取
int images[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken};

//实例化省的集合,把图标什么的都放到list中
list_pro = new ArrayList<>();
for (int i = 0; i < provinces.length; i++) {
Map<String,Object> map=new HashMap<>();
map.put("image",images[i]);
map.put("title",provinces[i]);
list_pro.add(map);
}

//湖南省的市
String[] pro_hunan={"长沙市","娄底市","新邵市"};
List<Map<String,Object>> list_pro_hunan=new ArrayList<>();
for (int i = 0; i < pro_hunan.length; i++) {
Map<String,Object> map=new HashMap<>();
map.put("image",images[i]);
map.put("title",pro_hunan[i]);
list_pro_hunan.add(map);
}

String[] pro_guangdong={"东莞市","深圳市","佛山市"};
List<Map<String,Object>> list_pro_guangdong=new ArrayList<>();
for (int i = 0; i < pro_guangdong.length; i++) {
Map<String,Object> map=new HashMap<>();
map.put("image",images[i]);
map.put("title",pro_guangdong[i]);
list_pro_guangdong.add(map);
}

String[] pro_yunnan={"临沧市","昆明市","丽江市"};
List<Map<String,Object>> list_pro_yunnan=new ArrayList<>();
for (int i = 0; i < pro_yunnan.length; i++) {
Map<String,Object> map=new HashMap<>();
map.put("image",images[i]);
map.put("title",pro_yunnan[i]);
list_pro_yunnan.add(map);
}

//把城市和对应的省份装置到map集合中
map.put(list_pro.get(0),list_pro_hunan);
map.put(list_pro.get(1),list_pro_guangdong);
map.put(list_pro.get(2),list_pro_yunnan);

//给省和市设置适配器
adapter1 = new SimpleAdapter(SpinnerActivity.this, list_pro,android.R.layout.activity_list_item,new String[]{"image","title"},new int[]{android.R.id.icon,android.R.id.text1});
s_spinner_spinner1.setAdapter(adapter1);

adapter2 = new SimpleAdapter(SpinnerActivity.this,list_pro_hunan,android.R.layout.activity_list_item,new String[]{"image","title"},new int[]{android.R.id.icon,android.R.id.text1});
s_spinner_spinner2.setAdapter(adapter2);

//设置省的选择监听事件,配置每个省对应的市
s_spinner_spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//获得选择到的省list_pro集合中的值
Object o= list_pro.get(position);
//适配器中的参数:
//1:哪个上下文
//2:集合——(根据map集合中的键获得集合)
//3:样式:我这里写的是系统中的样式,也可以放自己写的
//4:new String[]{},中间的参数是控件
//5:new int[]{},参数是控件的类型
adapter2 = new SimpleAdapter(SpinnerActivity.this,map.get(o),android.R.layout.activity_list_item,new String[]{"image","title"},new int[]{android.R.id.icon,android.R.id.text1});
s_spinner_spinner2.setAdapter(adapter2);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});
}
}
今天就整理到这里了,欢迎指点!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息