简介:
spinner是一个列表选择框,会在用户选择后,展示一个列表供用户进行选择。Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter进行封装。
下面介绍一下Spinner的常用XML属性,Android也为其属性提供了相应的getter、setter方法:
作为一个列表选择控件,Spinner具有一些选中选项可以触发的事件,但它本身没有定义这些事件,均继承自间接父类AdapterView。Spinner支持的几个常用事件有以下几个:
PS:因为适配器可以设置各种不同的样式,有选择、单选、多选,所以OnItemCLickListener和OnItemSelectedListener是适用于不同场景的。
数据绑定:
对于Spinner展示的数据源,一般使用两种方式设定数据:
先来讲讲通过XML资源文件设置Spinner数据的方式,首先需要在/res/values目录下新建XML格式的资源文件,名字不重要,但是一般会使用strings.xml。在其中的<resourse.../>标签下,定义<string-array.../>标签,通过它中的<item.../>标签来设置选择数据。
XML文件结构:
<resource>
<string-array name="arrayname">
<item>item1</item>
<item>item2</item>
<item>item3</item>
</string-array>
<resource>
布局代码:
<?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <TextView 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:text="弹出的Spinner" /> 11 12 <Spinner 13 android:id="@+id/spinnerBase" 14 android:layout_width="match_parent" 15 android:layout_height="wrap_content" 16 android:spinnerMode="dialog" /> 17 18 <TextView 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:text="下拉的Spinner(默认)" /> 22 23 <Spinner 24 android:id="@+id/spinnerBase1" 25 android:layout_width="match_parent" 26 android:layout_height="wrap_content" 27 android:spinnerMode="dropdown" /> 28 29 <TextView 30 android:layout_width="wrap_content" 31 android:layout_height="wrap_content" 32 android:text="entries绑定数据源" /> 33 34 <Spinner 35 android:id="@+id/spinnerBase2" 36 android:layout_width="match_parent" 37 android:layout_height="wrap_content" 38 android:entries="@array/beijing" /> 39 40 <TextView 41 android:layout_width="wrap_content" 42 android:layout_height="wrap_content" 43 android:text="弹出带标题的Dialog,并且使用entries绑定数据源" /> 44 45 <Spinner 46 android:id="@+id/spinnerBase3" 47 android:layout_width="match_parent" 48 android:layout_height="wrap_content" 49 android:entries="@array/beijing" 50 android:prompt="@string/beij_prompt" 51 android:spinnerMode="dialog" /> 52 53 </LinearLayout>
List数据:
<?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string name="app_name">SpinnerDemo</string> 4 <string name="action_settings">Settings</string> 5 <string name="hello_world">Hello world!</string> 6 <string name="beij_prompt">北京区域</string> 7 <string-array name="beijing"> 8 <item>朝阳区</item> 9 <item>海淀区</item> 10 <item>房山区</item> 11 <item>丰台区</item> 12 <item>东城区</item> 13 <item>西城区</item> 14 </string-array> 15 </resources>
主代码:
1 package com.bgxt.datatimepickerdemo;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import android.app.Activity;
7 import android.os.Bundle;
8 import android.view.View;
9 import android.widget.AdapterView;
10 import android.widget.AdapterView.OnItemSelectedListener;
11 import android.widget.ArrayAdapter;
12 import android.widget.Spinner;
13 import android.widget.Toast;
14
15 public class SpinnerBaseActivity extends Activity {
16 private Spinner spinner1, spinner2;
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_spinnerbase);
22
23 spinner1 = (Spinner) findViewById(R.id.spinnerBase);
24 spinner2 = (Spinner) findViewById(R.id.spinnerBase1);
25 // 声明一个ArrayAdapter用于存放简单数据
26 ArrayAdapter<String> adapter = new ArrayAdapter<String>(
27 SpinnerBaseActivity.this, android.R.layout.simple_spinner_item,
28 getData());
29 // 把定义好的Adapter设定到spinner中
30 spinner1.setAdapter(adapter);
31 spinner2.setAdapter(adapter);
32 // 为第一个Spinner设定选中事件
33 spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
34
35 @Override
36 public void onItemSelected(AdapterView<?> parent, View view,
37 int position, long id) {
38 // 在选中之后触发
39 Toast.makeText(SpinnerBaseActivity.this,
40 parent.getItemAtPosition(position).toString(),
41 Toast.LENGTH_SHORT).show();
42 }
43
44 @Override
45 public void onNothingSelected(AdapterView<?> parent) {
46 // 这个一直没有触发,我也不知道什么时候被触发。
47 //在官方的文档上说明,为back的时候触发,但是无效,可能需要特定的场景
48 }
49 });
50
51 }
52
53 private List<String> getData() {
54 // 数据源
55 List<String> dataList = new ArrayList<String>();
56 dataList.add("北京");
57 dataList.add("上海");
58 dataList.add("南京");
59 dataList.add("宜昌");
60 return dataList;
61 }
62
63 }


原文:http://www.cnblogs.com/yiweiaimeng/p/4933461.html