android:spinnerMode:
1. dialog---对话框模式
2. dropdown--下拉模式
dropdown效果
android:prompt(标题的设置)
1. 仅仅只有在spinnerMode:dialog下才能生效
1. ="@string/name2"(需要通过@string/的方式去获得不可直接赋值)
这个格式是规定的 @后面不是文件名。
因为这是android里面的约定 资源文件里面的数组都用R.array.xxx表示
就如同要找到组件布局必须用R.layout.xxx表示一样
citys是数组名 存在values下声明:
- 北京
- 上海
- 成都
- 南京
但在实际开发中不建议这么用,这种模式是写死了,如果需要改动很麻烦只需要了解即可
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 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(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 data;
private ArrayAdapter 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();
data.add("北京");
data.add("成都");
data.add("上海");
data.add("南京");
// 数据源与适配器绑定
adapter=new ArrayAdapter(this,
android.R.layout.simple_list_item_1,
data);
// Spinner控件绑定适配器
spinner.setAdapter(adapter);
}
}
Spinner二级连动设置
分析: 二级联动 是由第一级控件触发点击事件后第二级的控件去给出对应的值
比如输入第一级控件选择为北京那么第二级控件就会给出所属的对应区
北京----东城、西城、宣武这样的 一个效果
思路:1.创建数据源、设置Spinner控件
2.把对应的"市"作为一个数据源 把该市对应的"区"又作为一个数据源,由此我们这里就需要两个数据源(市、区)
3.因为是由第一个控件触发点击事件后 第二个控件的值会对应的给出,所以我们只需要对第一个控件进行一个监听,时刻监听第一个控件
的触发的事件去给第二个控件赋值
4.最后是Spinner控件去绑定对应的适配器,对应的给出适配器绑定对应的数据源,完成!
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 data;
private List provinces;
private List city;
private ArrayAdapter 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(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 citys = getCitys(p_name);
adapter2=new ArrayAdapter(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();
provinces=new ArrayList();
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=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=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=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();
for (Province province : provinces) {
String cityname = province.getP_name();
city.add(cityname);
}
}
// 通过市获得区--备用赋值给Spinner2
private List getCitys(String c_name){
List citylist=new ArrayList();
for (Province province : provinces) {
if (c_name.equals(province.getP_name())) {
List citys = province.getCitys();
for (Citys citys2 : citys) {
String cityName = citys2.getCity();
citylist.add(cityName);
}
}
}
return citylist;
}
}
* Contex context:是一个上下文(这里可以用this表示):
* int resource:需要绑定用于展示的一个Layout布局
* T[] objects:泛型数组,也可以用集合表示(注:Spinner适配器只支持两种数据1.泛型数组 2.泛型集合)