1. 什么是Spinner?
Spinner是一个在手机上显示的下拉菜单
2. 如何声明一个Spinner?
静态布局:
1).在布局文件中使用:
1
2
3
|
<
Spinner
android:id=”@+id/spinnerId”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”/>
|
来声明。
注意:是大写的Spinner,而非spinner,若写成小写的,则会报错:
1
|
android.view.InflateException: Binary XML file line
#8: Error inflating class spinner
|
2).在string.xml中定义一个数组:
1
2
3
4
5
6
|
<
string-array
name=” bankArray”>
<
item
>工商银行</
item
>\
<
item
>招商银行</
item
>
<
item
>中国银行</
item
>
<
item
>……</
item
>
</
string-array
>
|
3).创建一个ArrayAdapter
1
2
3
|
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this
, R.array.bankArray, android.R.layout.simple_spinner_item);
// android.R.layout.simple_spinner_item是android自带的一个布局文件,用于定义下拉菜单点击之前的样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
// android.R.layout.simple_spinner_dropdown_item也是android自带的一个布局文件,用于定义点击下拉菜单弹出来的界面样式
4).得到Spinner对象,并设置适配器
1
2
3
|
spinner = (Spiinner)findViewById(R.id.spinnerId);
spinner.setAdapter(adapter);
spinner.setPrompt(“请选择银行”);
//设置弹出的下拉列表的标题
|
5).创建监听器(实现android.widget.AdapterView.OnItemSelectedListener接口)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
SpinnerOnSelectedListener
implements
OnItemSelectedListener{
@Override
//选择了某一个条目执行的方法
public
void
onItemSelected(AdapterView<?> parent, View view,
int
position,
long
id) {
//参数1:整个列表对象;2:点击的控件
//3:点击控件在父控件中的位置;4:选中条目的row id
String selected = parent.getItemAtPosition(position).toString();
System.out.println(selected);
}
@Override
//什么都没选择的时候执行的方法
public
void
onNothingSelected(AdapterView<?> parent) {
System.out.println(
"Noting selected"
);
}
}
|
6).为spinner绑定监听器
1
|
spinner.setOnItemSelectedListener(
new
SpinnerOnSelectedListener());
|
3. ArrayAdapter的另一种用法:
除了可以使用strings.xml文件当中的数组创建ArrayAdapter之外,还可以动态的创建ArrayAdapter:
1
2
3
4
5
|
List<String> list =
new
ArrayList<String>();
//注意:这里我直接使用了List<String>,这个list中存的就是String。如果不是,那么控件显示的内容则为该对象调用toString()方法后的内容。
list.add(“test1”);
list.add(“test2”);
……
|
//这里调用ArrayAdapter的构造函数来创建,参数依次为:上下文、显示条目的布局文件、使用的TextView的ID、要显示的数据
//这句话的意思就相当于是:把list中的每一个元素用一个R.id.textViewId显示,样式为R.layout.item。
1
|
ArrayAdapter adapter =
new
ArrayAdapter(
this
, R.layout.item, R.id.textViewId, list);
|
下面是item.xml布局文件(这里为了简单起见,只定义了ID、宽和高,各种样式已经省略):
1
2
3
4
5
|
<
LinearLayout
…….
<TextView id=”@+id/textViewId”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content” />
</
LinearLayout
>
|
注意蓝色的字体为布局文件,红色的为控件的ID,二者必须和new ArrayAdapter的参数对应。
这样就可以不把数据写死,可以灵活运用。