<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    android里的Spinner其實就是個ComboBox =。=
    一。基本使用方法:
    main.xml 不多解釋
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="vertical"
        android:layout_width
    ="fill_parent"
        android:layout_height
    ="fill_parent"
        
    >
    <Spinner
         
    android:id = "@+id/mySpinner"
         android:layout_width 
    = "fill_parent"
         android:layout_height 
    ="wrap_content"
         
    />
    </LinearLayout>

    在string.xml中使用“string-array”定義數據源。
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        
    <string name="app_name">MySpinnerDemo</string>
        
    <string-array name = "phones_array">
            
    <item>iPhone</item>
            
    <item>Android</item>
            
    <item>BlackBerry</item>
        
    </string-array>
    </resources>

    Activity類:
    package com.yinger;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.AdapterView.OnItemSelectedListener;

    /**
     * Spinner Demo
     * 
    @author Yinger
     * @time 2011-7-9 下午01:54:59
     * @mail melody.crazycoding@gmail.com
     
    */
    public class SpinnerDemo extends Activity {
        Spinner spinner 
    = null;
        String selected 
    = "0";
        
        
    /** Called when the activity is first created. */
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            spinner 
    = (Spinner)findViewById(R.id.mySpinner);
            initMySpinner();
        }

        
    private void initMySpinner() {
            ArrayAdapter
    <CharSequence> adapter = ArrayAdapter.createFromResource(
                    
    this, R.array.phones_array,
                    android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(adapter);
            spinner.setPrompt(
    "test");
            spinner.setOnItemSelectedListener(
    new SpinnerOnSelectedListener());
        }
        
        
    class SpinnerOnSelectedListener implements OnItemSelectedListener{
            
    public void onItemSelected(AdapterView<?> adapterView, View view, int position,
                    
    long id) {
                
    // TODO Auto-generated method stub
                selected = adapterView.getItemAtPosition(position).toString();
                System.out.println(
    "selected===========>" + selected);
            }

            
    public void onNothingSelected(AdapterView<?> arg0) {
                
    // TODO Auto-generated method stub
                System.out.println("selected===========>" + "Nothing");
            }
        }
    }

    二。debug發現的一個小問題:
    Spinner在初始化時會自動調用一次OnItemSelectedListener事件
    原因:有人說是Bug,其實這與C#的事件機制類似,懶得說了=。=
    提供的解決辦法:
    個人是通過在事件注冊之前調用
    spinner.setSelection(0true);
    但要注意,使用此方法,如果用戶選擇的也是第一項,那么OnItemSelectedListener事件不會被觸發……

    三。使用技巧
    1.動態添加Spinner的數據源
    修改initMySpinner方法,代碼如下:
    private void initMySpinner() {
            String[] phones 
    = {"iPhone","Android","BlackBerry"};
            ArrayAdapter
    <String> adapter = new ArrayAdapter<String>(
                    
    this,  android.R.layout. simple_spinner_item,
                    phones);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(adapter);
            spinner.setPrompt(
    "test");
            spinner.setSelection(
    0true);
            spinner.setOnItemSelectedListener(
    new SpinnerOnSelectedListener());
        }

    2.自定義Spinner的Layout,替換掉體統默認的android.R.layout.simple_spinner_item
    super easy
    my_spinner_item.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width
    ="fill_parent" 
        android:layout_height
    ="wrap_content"
        android:textSize
    ="12dip" 
        android:textColor
    ="#FF8B1500" 
        android:gravity
    ="center" />
    修改adapter:
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                    
    this,  R.layout.my_spinner_item,
                    phones);
    同理,可自定義layout,替換掉android.R.layout.simple_spinner_dropdown_item

    3.同時顯示圖片和文本
    自定義Adapter:
    package com.yinger;

    import android.content.Context;
    import android.graphics.Color;
    import android.view.Gravity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;

    /**
     * 自定義Adapter
     * 
    @author Yinger
     * @time 2011-7-9 下午03:39:34
     * @mail melody.crazycoding@gmail.com
     
    */
    public class MyAdapter extends BaseAdapter {

        
    private Context ctx;
        
    private int drawableIDs[];
        
    private int stringIDs[];

        
    public MyAdapter(Context ctx, int DrawableIDs[], int StringIDs[])
        {
            
    this.ctx = ctx;
            
    this.drawableIDs = DrawableIDs;
            
    this.stringIDs = StringIDs;
        }

        
    public int getCount() {
            
    // TODO Auto-generated method stub
            return drawableIDs.length ; 
        }

        
    public Object getItem(int position) {
            
    // TODO Auto-generated method stub
            return drawableIDs [position]; 
        }

        
    public long getItemId(int position) {
            
    // TODO Auto-generated method stub
            return position;
        }

        
    public View getView(int position, View convertView, ViewGroup parent) {
            
    // TODO Auto-generated method stub
            LinearLayout ll = new LinearLayout( ctx ); 
            ll.setOrientation(LinearLayout. HORIZONTAL ); 
            ll.setGravity(Gravity. CENTER_VERTICAL ); 
            ImageView iv 
    = new ImageView( ctx ); 
            iv.setImageResource( drawableIDs [position]); 
            iv.setLayoutParams( 
    new ViewGroup.LayoutParams(10040)); 
            ll.addView(iv);                     
            TextView tv 
    = new TextView( ctx ); 
            tv.setText( stringIDs [position]); 
            tv.setTextSize(
    14); 
            tv.setTextColor(Color.BLUE ); 
            ll.addView(tv); 
            
    return ll; 
        }
    }

    修改initMySpinner方法:
    private void initMySpinner() {
            
    int[] phonePics = {R.drawable.apple,R.drawable.android,R.drawable.blackberry};
            
    int[] phones = {   R.string.iphone, R.string.android,  R.string.blackberry};
            
            MyAdapter adapter 
    = new MyAdapter(this,phonePics,phones);
            spinner.setAdapter(adapter);
            spinner.setPrompt(
    "test");
            spinner.setSelection(
    0true);
        }
    運行結果截圖:


    OK,但使用自定義的Adapter,我們如何來獲取選中的文本信息呢?
    在MyAdapter中,修改getView方法,添加黃色區域代碼如下:
    public View getView(int position, View convertView, ViewGroup parent) {
            
    // TODO Auto-generated method stub
            LinearLayout ll = new LinearLayout( ctx ); 
            ll.setOrientation(LinearLayout. HORIZONTAL ); 
            ll.setGravity(Gravity. CENTER_VERTICAL ); 
            ImageView iv 
    = new ImageView( ctx ); 
            iv.setImageResource( drawableIDs [position]); 
            iv.setLayoutParams( 
    new ViewGroup.LayoutParams(10040)); 
            ll.addView(iv);                     
            TextView tv 
    = new TextView( ctx ); 
            tv.setText( stringIDs [position]); 
            tv.setTextSize(
    14); 
            tv.setTextColor(Color.BLUE ); 
            
    tv.setTag( "tagTextView" );        
            ll.addView(tv);

            return
     ll; 
        }

    重寫事件中的onItemSelected方法:
    // TODO Auto-generated method stub
            public void onItemSelected(AdapterView<?> adapterView, View view, int position,
                    
    long id) {
                
    if(adapterView.getId() == R.id.mySpinner)
                {
                    LinearLayout ll 
    = (LinearLayout)view; 
                    TextView tv 
    = (TextView)ll.findViewWithTag( "tagTextView" ); 
                    String str 
    = (String)tv.getText(); 
                    System.out.println(
    "selected===========>" + str);
                }
            }

    最后,別忘了注冊該事件。=。=
    posted on 2011-07-09 16:15 Ying-er 閱讀(20806) 評論(1)  編輯  收藏 所屬分類: Android

    評論:
    # re: Spinner 使用方法小結 2011-07-26 10:40 | yoochen
    對于第二項比較困惑。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品无码MV在线观看| 国产高清在线免费| 亚洲夜夜欢A∨一区二区三区| 亚洲精品女同中文字幕| 成人免费毛片观看| 亚洲国产精品一区二区三区在线观看 | 91成人在线免费视频| 亚洲A∨无码无在线观看| 久久青草国产免费观看| 亚洲AV无码久久精品色欲| 免费国产99久久久香蕉| 亚洲国产精品久久久久网站| 久久免费动漫品精老司机 | 亚洲日韩中文字幕天堂不卡| 无码A级毛片免费视频内谢| 亚洲第一成年网站大全亚洲| 人成午夜免费视频在线观看| 亚洲熟妇无码AV不卡在线播放| 免费无码又爽又高潮视频 | 亚洲国产精品无码第一区二区三区| 永久在线毛片免费观看| 老司机午夜精品视频在线观看免费| 亚洲成a人片在线观看久| 久久久久久久国产免费看| 亚洲成a人片在线观看日本| 亚洲视频免费在线看| 亚洲精华国产精华精华液好用 | 国产V亚洲V天堂无码| 国产精品怡红院永久免费| 丰满亚洲大尺度无码无码专线 | 精品国产污污免费网站| 亚洲欧洲日产韩国在线| 日日夜夜精品免费视频| 中文字幕免费在线看电影大全| 亚洲一本综合久久| 男女交性永久免费视频播放 | 91成人在线免费视频| 精品一区二区三区无码免费直播 | 亚洲精品123区在线观看| 久久青青草原亚洲av无码| 成人午夜免费福利视频|