下拉列表(Spinners)

Spinner为用户提供了一种快速的在多个值中选择一个值的控件,默认情况下spinner会显示当前已经被选中的值. 点击spinner的时候, 它会显示一个下拉列表, 展示出可以选择的数据, 用户可以在其中选择一个.

我们可以通过在XML文件中创建<Spinner>标签来增加一个spinner控件:

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

如果想要填充数据, 那么需要在Activity或者Fragment中指定一个SpinnerAdapter.

为spinner填充数据

指定spinner的填充数据的方法跟AutoCompleteTextView的用法有点相似.需要为spinner指定一个SpinnerAdapter(一个interface), 根据数据源的不同可以选择ArrayAdapter或者CursorAdapter.

栗子:
假如我们的数据从数组来, 首先在XML文件中声明一个string数组:

<?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中为spinner指定一个ArrayAdapter:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.planets_array, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);

使用createFromResource()可以让我们从string array资源中创建一个ArrayAdapter.第三个参数android.R.layout.simple_spinner_item指定了spinner中的选项应该如何显示在spinner中.simple_spinner_item是由系统提供的默认layout,如果我们觉得不合适还可以定义自己的layout.

响应用户的选择

当用户从下拉列表中选择一项的时候,Spinner对象将会收到一个on-item-selected事件.为了处理这一事件我们需要实现AdapterView.OnItemSelectedListener接口, 然后用onItemSelected()方法来处理具体的操作. 栗子:

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...

    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
}

AdapterView.OnItemSelectedListener接口需要实现onItemSelected()方法和onNothingSelected()方法. 然后绑定给spinner:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);
Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1