<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
    對于第二項比較困惑。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲AV无码乱码在线观看性色扶 | 亚洲国产精品综合久久久| 国产精品免费视频观看拍拍| 精品亚洲视频在线观看| 亚洲黄片手机免费观看| 国产亚洲综合色就色| 最近中文字幕高清免费中文字幕mv| 亚洲国产精品成人精品小说| 日本免费网址大全在线观看| 香蕉大伊亚洲人在线观看| 永久黄网站色视频免费| 国产午夜亚洲精品不卡| 久久乐国产精品亚洲综合| 99re6在线视频精品免费| 亚洲专区先锋影音| 免免费国产AAAAA片| 在线播放亚洲精品| 国内精品99亚洲免费高清| 免费无码又爽又刺激高潮视频| 亚洲欧洲自拍拍偷综合| 成人免费看黄20分钟| av电影在线免费看| 亚洲一区二区三区电影| 精品国产麻豆免费网站| 9久热精品免费观看视频| 亚洲熟妇av一区| 国产一区视频在线免费观看| 成人爽a毛片免费| 亚洲最大成人网色香蕉| 亚洲麻豆精品国偷自产在线91| 久久午夜免费鲁丝片| 亚洲丰满熟女一区二区哦| 91麻豆精品国产自产在线观看亚洲| 亚洲精品免费视频| 亚洲国产精品成人午夜在线观看| 在线亚洲精品自拍| 成人免费一区二区无码视频| 两个人的视频www免费| 亚洲午夜在线播放| 亚洲精品你懂的在线观看| 97人伦色伦成人免费视频|