• 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", "从没触发过");
                }
            });
        }
        
    }

    运行效果如图:

  • 相关阅读:
    用同余理解补码
    objenesis
    spring 事务处理
    SOCKS5 协议解析
    WebSocket 的鉴权授权方案
    加密解密基础问题:字节数组和16进制字符串的相互转换
    主机字节序 与 网络字节序
    RSA 理论
    分类算法----k近邻算法
    R语言统计分析应用与SAS、SPSS的比较
  • 原文地址:https://www.cnblogs.com/Claire6649/p/5952245.html
Copyright © 2020-2023  润新知