下拉列表
Spinners提供了一种能从列表中快速选取某个值的方式。默认状态下,spinner只显示当前选择的值。通过触碰spinner会显示一个下拉菜单,里面含有所有可用的值,用户可以从中选择一个新的选项了。
你可以使用 Spinner 对象把下拉列表添加到布局中。不过一般你应该在XML布局中使用 <Spinner> 元素添加下拉列表。例如:
<Spinner
android:id="@+id/planets_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
若要为下拉列表填充选项列表,那么你需要在 Activity
或 Fragment
源代码中指定一个 SpinnerAdapter。
使用用户选项填充下拉列表
提供给下拉列表的选项可以来自任何资源,但是必须通过 SpinnerAdapter
提供,比如说如果选项来自数组,那么就用 ArrayAdapter
,再比如说如果选项来自数据库查询,那么就用 CursorAdapter
。
举例来讲,如果下拉列表使用的可用选项是预定义好的,那么你可以在 string resource file 中把它们定义成字符串数组来供下拉列表使用:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
你可以在 Activity
或 Fragment
中使用下面的代码通过 ArrayAdapter 实例把像这样的数组应用到下拉列表中:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// 使用字符串数组和默认下拉列表项目的布局创建ArrayAdapter
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, android.R.layout.simple_spinner_item);
// 在选择列表出现时指定它的布局
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 为下拉列表应用适配器
spinner.setAdapter(adapter);
createFromResource()
方法可以让你从从字符数组创建 ArrayAdapter
。这个方法的第三个参数是定义下拉列表控件中选择项的布局资源。simple_spinner_item
布局是系统提供的是默认布局,你应该使用它除非你想要自己定义下拉列表外观的布局。
然后你应该调用 setDropDownViewResource(int)
来指定适配器用来显示下拉列表选项外观的布局(simple_spinner_dropdown_item 是平台定义的另一种标准布局)。
调用 setAdapter()
来把适配器应用到 Spinner
。
响应用户选择
当用户从下拉列表中选中项目后,Spinner 对象会收到on-item-selected事件。
实现 AdapterView.OnItemSelectedListener 接口和相应的 onItemSelected() 回调方法就可以为下拉列表定义选中事件处理程序。例如,下面是在 Activity 中实现接口:
public class SpinnerActivity extends Activity implements OnItemSelectedListener {
...
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
// 选项被选中时。你可以使用parent.getItemAtPosition(pos)获取被选中的项目
}
public void onNothingSelected(AdapterView<?> parent) {
// 另一个接口回调
}
}
AdapterView.OnItemSelectedListener
需要实现 onItemSelected()
和 onNothingSelected()
回调方法。
然后你需要调用 setOnItemSelectedListener() 指定接口的实现。
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);
如果你用 Activity
或 Fragment
(例如上面的事例)实现了 AdapterView.OnItemSelectedListener
接口,那么你可以把this作为接口事例传递使用。