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     @Override
11     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 = {"妈妈","爸爸","爷爷","奶奶","外公","外婆"};
    
    @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", "从没触发过");
            }
        });
    }
    
}

 

运行效果如图:

 

 

posted on 2016-10-12 12:04  语风6649  阅读(466)  评论(0编辑  收藏  举报

导航