首页 > 代码库 > Android Spinner列表选择框

Android Spinner列表选择框

Spinner

Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源。

 

1、直接设置数组源

 在res/values/strings.xml中设置数组源

1 <string-array name="selector">2         <item >学生证</item>3         <item >结婚证</item>4         <item >军官证</item>5         <item >党员证</item>6     </string-array>

然后在MainActivity找到spinner,然后设置默认选择项

 1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.widget.Spinner; 4  5 public class MainActivity extends Activity { 6     /** 7      * Spinner列表选择框 8      * 是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源 9      */10     @Override11     protected void onCreate(Bundle savedInstanceState) {12         super.onCreate(savedInstanceState);13         setContentView(R.layout.activity_main);14         15         Spinner spinner = (Spinner) findViewById(R.id.spinner);16         17         spinner.setSelection(2, true);//从0开始18     }19 20     21 }

这里的setSelection(int position, boolean animate)和setSelection(int position) 实现机制有较大区别,当调用前者时重新layout,立即触发onItemSelected函数,作用相当于用手直接点击。而后者设置了下次选择位置:setNextSelectedPositionInt(position); 然后请求Layout;,而requestLayout并非立即执行,仅仅是一个schedule。但是后者可能在重新装载数据然后Layout时丢失了某些状态。

运行效果如图

技术分享

 

 

 

2、使用适配器,并设置监听

 

public class MainActivity extends Activity {    /**     * Spinner列表选择框     * 是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源     */        //数据源     String[] data = http://www.mamicode.com/{"妈妈","爸爸","爷爷","奶奶","外公","外婆"};        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                Spinner spinner = (Spinner) findViewById(R.id.spinner);                //直接使用数组源        //spinner.setSelection(2,true);                //使用适配器        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data);        spinner.setAdapter(adapter);                //下拉列表选择框,设置监听        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView<?> parent, View view,                    int position, long id) {                //直接数组源                //String name = getResources().getStringArray(R.array.selector)[position];                //Toast.makeText(getBaseContext(), name, Toast.LENGTH_SHORT).show();                                //适配器的时候                String name = data[position];                //实质上如果是MainActivity.this也可以,但是如果改成this,会报错。因为这个用了匿名内部类                Toast.makeText(getBaseContext(), name, Toast.LENGTH_SHORT).show();            }            @Override            public void onNothingSelected(AdapterView<?> parent) {                //当没有任何选择时调用从没触发过                Log.e("TAG", "从没触发过");            }        });    }    }

 

运行效果如图:

 

技术分享

 

Android Spinner列表选择框