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

安卓中实现二级联动的样子

效果图:

实现思路:

通过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) {

            }
        });
    }
}
今天就整理到这里了,欢迎指点!


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值