天天看点

Spinner用法案例

spinner控件也是一种列表类型的控件,它的继承关系如下:

java.lang.object

   ↳ android.view.view

     ↳ android.view.viewgroup

       ↳ android.widget.adapterview<t extends android.widget.adapter>

         ↳ android.widget.absspinner

           ↳ android.widget.spinner

android.widget.spinner继承了android.view.viewgroup类。下面安排一个案例如图6-5,有两个spinner,颜色选择spinner和星座选择spinner。点击颜色选择spinner右边的 按钮,如图6-6所示,弹出单选对话框。

Spinner用法案例

图6-5 spinner控件                           图6-6 颜色选择spinner

点击星座选择spinner右边的 按钮,如图6-7所示,弹出列表对话框。

Spinner用法案例

图6-7 星座选择spinner

程序代码请参考代码清单6-3:

【代码清单6-3】 chapter6_2/src/com/work/spinneractivity.java

public class spinneractivity extends activity {

    @override

    public void oncreate(bundle savedinstancestate) {

        super.oncreate(savedinstancestate);

        setcontentview(r.layout.main);

        final textview txt2 = (textview) findviewbyid(r.id.textview02);

        spinner s1 = (spinner) findviewbyid(r.id.spinner01);

        final arrayadapter<charsequence> adapter = arrayadapter.createfromresource(

                this, r.array.colors, android.r.layout.simple_spinner_item);

        adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item);

        s1.setadapter(adapter);

        s1.setonitemselectedlistener(

                new onitemselectedlistener() {

                    public void onitemselected(

                            adapterview<?> parent, view view, int position, long id) {

                            txt2.settext(adapter.getitem(position).tostring());

                    }

                    public void onnothingselected(adapterview<?> parent) {

                    txt2.settext("没选中的");

                });

        final textview txt4 = (textview) findviewbyid(r.id.textview04);

        spinner s2 = (spinner) findviewbyid(r.id.spinner02);

        arrayadapter<charsequence> adapterc = new arrayadapter<charsequence>(this,

                android.r.layout.simple_spinner_item, constellations);

        adapterc.setdropdownviewresource(android.r.layout.simple_spinner_item);

        s2.setadapter(adapterc);

        s2.setonitemselectedlistener(

                    txt4.settext(constellations[position]);

                    txt4.settext("没选中的");

    }

    static final string[] constellations = new string[] {

    "白羊座", "金牛座", "双子座",

    "巨蟹座", "狮子座", "处女座",

    "天枰座", "天蝎座", "射手座",

    "魔蝎座", "水瓶座", "双鱼座"

        };

}

第一个颜色选择spinner数据来源于values文件夹内的arrays.xml文件,

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string-array name="colors">

        <item>红色</item>

        <item>橙色</item>

        <item>黄色</item>

        <item>绿色</item>

        <item>蓝色</item>

        <item>紫色</item>

    </string-array>

</resources>

通过下面的方法从一个资源xml文件中加载数据,创建一个数组类的适配器对象,布局文件是使用系统提供的layout.simple_spinner_item,这里布局文件设置的是spinner布局样式。

   final arrayadapter<charsequence> adapter = arrayadapter.createfromresource(

              this, r.array.colors, android.r.layout.simple_spinner_item);

而弹出的下拉列表的样式是由spinner的适配器的setdropdownviewresource()方法设置的。

adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item);

第二个spinner用于星座选择,数据是用数组存储的。这两个spinner的setonitemselectedlistener()方法的事件处理如下:

s1.setonitemselectedlistener(

      new onitemselectedlistener() {

           public void onitemselected(

                  adapterview<?> parent, view view, int position, long id) {

                  txt2.settext(adapter.getitem(position).tostring());

            }

            public void onnothingselected(adapterview<?> parent) {

                  txt2.settext("没选中的");

             }

});

其中的onitemselected(adapterview<?> parent, view view, int position, long id)方法是选中选择项目时触发的,其中的position选择项目的位置,id是选择项目的编号。而什么都不选的方法是onnothingselected(adapterview<?> parent)。

                                出自《android开发案例驱动教程》第六章