<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
    對于第二項比較困惑。  回復  更多評論
      
    主站蜘蛛池模板: xxxx日本在线播放免费不卡| 亚洲日本中文字幕天天更新 | 国产免费131美女视频| h视频在线观看免费| 另类小说亚洲色图| 亚洲人成高清在线播放| 亚洲AV日韩AV天堂久久| 亚洲裸男gv网站| 国产精品亚洲美女久久久| 国产中文在线亚洲精品官网| 可以免费观看一级毛片黄a| 亚洲色偷偷偷综合网| 亚洲一区在线视频观看| 久久精品国产亚洲77777| 亚洲国语精品自产拍在线观看| 亚洲va久久久噜噜噜久久男同| 国产乱子精品免费视观看片| 久久A级毛片免费观看| 91情侣在线精品国产免费| 天堂在线免费观看中文版| 日日狠狠久久偷偷色综合免费 | free哆拍拍免费永久视频| 国产99久久久久久免费看| a免费毛片在线播放| 免费看无码特级毛片| 四虎永久在线精品免费观看视频| 日韩一区二区a片免费观看 | 青青免费在线视频| 在线免费播放一级毛片| 成人精品国产亚洲欧洲| 国产又黄又爽胸又大免费视频| 91麻豆最新在线人成免费观看| 日韩一区二区免费视频| 亚洲伊人久久精品影院| 亚洲综合中文字幕无线码| 中文在线观看永久免费| 四虎国产精品免费视| 91亚洲视频在线观看| 你懂得的在线观看免费视频| 毛片网站免费在线观看| 亚洲一区二区三区日本久久九|