安卓入门--Spinner控件与二级联动详解
来源:互联网 发布:百万公众网络答题活动 编辑:程序博客网 时间:2024/06/05 00:17
SPinner
- 父类:AbsSpinner–AdapterView
- 定义:下拉菜单控件
常用方法:
android:spinnerMode:
1. dialog---对话框模式2. dropdown--下拉模式
dropdown效果
dialog效果:
android:prompt(标题的设置)
1. 仅仅只有在spinnerMode:dialog下才能生效1. ="@string/name2"(需要通过@string/的方式去获得不可直接赋值)
* android:entries
这个格式是规定的 @后面不是文件名。 因为这是android里面的约定 资源文件里面的数组都用R.array.xxx表示 就如同要找到组件布局必须用R.layout.xxx表示一样 citys是数组名 存在values下声明: <string-array name="citys"> <item >北京</item> <item >上海</item> <item >成都</item> <item >南京</item> </string-array> 但在实际开发中不建议这么用,这种模式是写死了,如果需要改动很麻烦只需要了解即可
android:popupBackground(背景颜色)
1. 为下拉区域给定一个颜色2. 只有当spinnerMode为:dropdown是才生效
背景颜色的改变
Spinner以代码方式展示Spinner选项
- 数组类型
import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.ArrayAdapter;import android.widget.Spinner;/** * * @author sKy° * Spinner:使用适配器绑定数据源为 "数组类型" 的数据 * @d2016-5-13 */public class MainActivity extends Activity {// 初始化所需数据 private Spinner spinner; private ArrayAdapter<String> adapter; private String[] data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 找到spinner控件 spinner=(Spinner) findViewById(R.id.sp);// 创建数据源 data=new String[]{"东京","成都","上海","南京"};// 数据源与适配器绑定 adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);// Spinner控件与适配器绑定 spinner.setAdapter(adapter); } }
- 集合类型
import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.Spinner;/** * * @author sKy° * 2.Spinner:使用适配器绑定数据源为 "集合类型" 的数据 * @d2016-5-13 * */public class secendActivity extends Activity {// 初始化数据 private Spinner spinner; private List<String> data; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 通过id获得控件 spinner = (Spinner) findViewById(R.id.sp);// 创建数据源 (也可以写一个方法,通过循环遍历去添加集合元素) data=new ArrayList<String>(); data.add("北京"); data.add("成都"); data.add("上海"); data.add("南京");// 数据源与适配器绑定 adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);// Spinner控件绑定适配器 spinner.setAdapter(adapter); }}
效果:
Spinner二级连动设置
分析: 二级联动 是由第一级控件触发点击事件后第二级的控件去给出对应的值 比如输入第一级控件选择为北京那么第二级控件就会给出所属的对应区 北京----东城、西城、宣武这样的 一个效果思路:1.创建数据源、设置Spinner控件 2.把对应的"市"作为一个数据源 把该市对应的"区"又作为一个数据源,由此我们这里就需要两个数据源(市、区) 3.因为是由第一个控件触发点击事件后 第二个控件的值会对应的给出,所以我们只需要对第一个控件进行一个监听,时刻监听第一个控件 的触发的事件去给第二个控件赋值 4.最后是Spinner控件去绑定对应的适配器,对应的给出适配器绑定对应的数据源,完成!
控件设定部分:
- 对应的类获取对应的数据(市、区)部分:
- mainActivity代码部分:
package com.example.adapter;import java.util.ArrayList;import java.util.List;import com.entiy.place.Citys;import com.entiy.place.Province;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Adapter;import android.widget.AdapterView;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.Spinner;/** * * @author sKy° * 代码部分 * @d2016-5-13 */public class ThreeActivity extends Activity implements OnItemSelectedListener{ private Spinner spinner1, spinner2; private List<Citys> data; private List<Province> provinces; private List<String> city; private ArrayAdapter<String> adapter1,adapter2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 通过资源ID找到控件 spinner1 = (Spinner) findViewById(R.id.sp); spinner2 = (Spinner) findViewById(R.id.sp1);// 创建数据源 getData(); getPriovince();// 数据源与第一级的适配器 adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, city); spinner1.setAdapter(adapter1); spinner1.setOnItemSelectedListener(this); } // 重写OnItemSelectedListener方法 @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {// 设置第二个控件给定数据源绑定适配器 String p_name = city.get(position).trim(); List<String> citys = getCitys(p_name); adapter2=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, citys); spinner2.setAdapter(adapter2); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub }// 设定一个方法 把数据(市、区)装到对应的集合里面 private void getData(){// 创建集合 把city数据添加到集合 data=new ArrayList<Citys>(); provinces=new ArrayList<Province>(); Citys citys=null; Province province=null;// 北京市区 citys=new Citys("东城"); data.add(citys); citys=new Citys("西城"); data.add(citys); citys=new Citys("宣武"); data.add(citys); province=new Province("北京", data); provinces.add(province);// 上海市区 data=new ArrayList<Citys>(); citys=new Citys("黄浦"); data.add(citys); citys=new Citys("卢湾"); data.add(citys); citys=new Citys("嘉定"); data.add(citys); province=new Province("上海", data); provinces.add(province);// 成都市区 data=new ArrayList<Citys>(); citys=new Citys("青羊"); data.add(citys); citys=new Citys("锦江"); data.add(citys); citys=new Citys("武侯"); data.add(citys); province=new Province("成都", data); provinces.add(province);// 天津市区 data=new ArrayList<Citys>(); citys=new Citys("塘沽"); data.add(citys); citys=new Citys("蓟县"); data.add(citys); citys=new Citys("宝坻"); data.add(citys); province=new Province("天津", data); provinces.add(province); }// 通过遍历集合获得市的名字 --备用赋值给Spinner1 private void getPriovince(){ city=new ArrayList<String>(); for (Province province : provinces) { String cityname = province.getP_name(); city.add(cityname); } }// 通过市获得区--备用赋值给Spinner2 private List<String> getCitys(String c_name){ List<String> citylist=new ArrayList<String>(); for (Province province : provinces) { if (c_name.equals(province.getP_name())) { List<Citys> citys = province.getCitys(); for (Citys citys2 : citys) { String cityName = citys2.getCity(); citylist.add(cityName); } } } return citylist; }}
- 二级联动最终效果,可以看到当选择为成都时给出了对应的区:
Adapter的三个参数
* Contex context:是一个上下文(这里可以用this表示):* int resource:需要绑定用于展示的一个Layout布局* T[] objects:泛型数组,也可以用集合表示(注:Spinner适配器只支持两种数据1.泛型数组 2.泛型集合)
源码里面的解释:
0 0
- 安卓入门--Spinner控件与二级联动详解
- 安卓开发: Spinner联动
- Spinner 二级联动
- Spinner的二级联动
- Spinner的二级联动
- spinner二级联动
- 安卓 Spinner详解
- android 中spinner 二级联动
- Android Spinner实现二级联动
- 安卓学习--------spinner控件
- 安卓Spinner的三级联动菜单效果
- 安卓开发中spinner的三级联动
- 二级联动菜单详解
- 二级联动菜单详解
- 安卓Spinner控件的Bug
- Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
- ASP.NET 二级联动控件
- 安卓学习笔记---联动:一个使用ExpandableListView(二级树)实现的联动功能
- Go语言学习(十五)面向对象编程-接口
- Java学习之private和this关键字
- Linux磁盘无密码共享给Winddows
- STM32有关定时器的计算
- LayoutIt! 设计Bootstrap页面
- 安卓入门--Spinner控件与二级联动详解
- **解析JSON对象与字符串之间的相互转换
- opencv_滑动条的使用
- .osr 文件格式解析(四) - LifeBarGraph和TimeStamp
- Ado.Net 通用DB访问类
- php 魔术方法 深度理解
- 九大排序算法总结
- mysql Access denied for user解决方法
- 解析:TypedArray 为什么需要调用recycle()