Spinners(下拉列表)

下拉列表

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作为接口事例传递使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值