Android—控件Spinner实现下拉列表及监听

在Web开发中,HTML提供了下拉列表的实现,就是使用<select>元素实现一个下拉列表,在其中每个下拉列表项使用<option>表示即可。这是在Web开发中一个必不可少的交互性组件,而在Android中的对应实现就是Spinner。

1. 以资源方式,静态展示 Spinner 选项

<Spinner 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/spinner_id"
    android:entries="@array/spinnerarr"/>
 
数据文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="spinnerarr">
        <item>北京</item>
        <item>上海</item>
    </string-array>
</resources>

2. 以代码方式,动态展示 Spinner 选项,用适配器给Spinner添加数据

//页面布局
<Spinner
    android:id="@+id/spin_pos_add_mcc"
    android:layout_toRightOf="@id/static_text_pos_add_mcc"
    android:layout_width="500px"
    android:layout_height="150px"
    android:layout_marginTop="1200px"/>


//获取SpinnerOption数组,可以通过网络、本地sqlite数据库、手动添加等获取数据
public ArrayList<SpinnerOption> getMatchListSp(){
    ArrayList<SpinnerOption> lists=new ArrayList<>();
    Cursor cursor = db.query("plotform", null, null, null, null, null, null);
    if (cursor.moveToFirst()) {
        do {
            int number=cursor.getInt(cursor.getColumnIndex("number"));
            String ma=cursor.getString(cursor.getColumnIndex("mach"));
            String plot=cursor.getString(cursor.getColumnIndex("plotform"));
            SpinnerOption c = new SpinnerOption(number ,":"+ ma+"-"+plot);
            lists.add(c);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return lists;
}

//将数组通过Adapter绑定到Spinner上
ArrayList<SpinnerOption> lists=new PosDao(this).getMatchListSp();
Spinner Sp=(Spinner)findViewById(R.id.spin_pos_add_match);
//设置Adapter
ArrayAdapter<SpinnerOption> mAdapter = new ArrayAdapter<SpinnerOption>(this,android.R.layout.simple_spinner_item, lists);
mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Sp.setAdapter(mAdapter);

//取下拉框的值
((SpinnerOption)Sp.getSelectedItem()).getText();

//监听控件
Sp.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//选择item的选择点击监听事件
    public void onItemSelected(AdapterView<?> arg0, View arg1,
            int arg2, long arg3) {
        //可以通过arg2获得选择了第几项
    }

    public void onNothingSelected(AdapterView<?> arg0) {
        myTextView.setText("Nothing");
    }
});
本文转自:https://blog.csdn.net/qq_38217237/article/details/79044448
新加评论 评论标题:

文章评论

    SpinnerOption的定义——Spinner的value和text关系

        2018-09-19    
    修改 删除

    参:原 //https://blog.csdn.net/zhouyingge1104/article/details/41489643

    下拉框选项实体 SpinnerOption.java,在Spinner中显示选项的时候,默认会显示每个项(Object)的 toString() 之后的内容,因此重写 toString() 方法,让它输出 text 。

    //一种基本的下拉选项实体定义方法
    public class SpinnerOption {
        private int value = "";
        private String text = "";
     
        public SpinnerOption() {
            value = ""; text = "";
        }
     
        public SpinnerOption(int value, String text) {
            this.value = value;
            this.text = text;
        }
     
        @Override
        public String toString() { 
            return text;
        }
        public int getValue() {
            return value;
        }
        public String getText() {
            return text;
        }
    }
1.以资源方式,静态展示Sier选项
2.以代码方式,动态展示Sier选项,用适配器给Sier添加数据
评论列表
SpinnerOption的定义——Spinner的value和text关系