android里的Spinner其实就是个ComboBox =。=
一。基本使用方法:
main.xml 不多解释

<? xmlversion="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”定义数据源。
<? xmlversion="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;

/**
*SpinnerDemo
*
@author Yinger
*@time2011-7-9下午01:54:59
*@mailmelody.crazycoding@gmail.com
*/
public class SpinnerDemo extends Activity{
Spinnerspinner
= null ;
Stringselected
= " 0 " ;

/** Calledwhentheactivityisfirstcreated. */
@Override
public void onCreate(BundlesavedInstanceState){
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,Viewview, int position,
long id){
// TODOAuto-generatedmethodstub
selected = adapterView.getItemAtPosition(position).toString();
System.out.println(
" selected===========> " + selected);
}

public void onNothingSelected(AdapterView <?> arg0){
// TODOAuto-generatedmethodstub
System.out.println( " selected===========> " + " Nothing " );
}
}
}

二。debug发现的一个小问题:
Spinner在初始化时会自动调用一次OnItemSelectedListener事件
原因:有人说是Bug,其实这与C#的事件机制类似,懒得说了=。=
提供的解决办法:
个人是通过在事件注册之前调用
spinner.setSelection( 0 , true ); 但要注意,使用此方法,如果用户选择的也是第一项,那么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(
0 , true );
spinner.setOnItemSelectedListener(
new SpinnerOnSelectedListener());
}

2.自定义Spinner的Layout,替换掉体统默认的android.R.layout.simple_spinner_item
super easy
my_spinner_item.xml:
<? xmlversion="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
*@time2011-7-9下午03:39:34
*@mailmelody.crazycoding@gmail.com
*/
public class MyAdapter extends BaseAdapter{

private Contextctx;
private int drawableIDs[];
private int stringIDs[];

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

public int getCount(){
// TODOAuto-generatedmethodstub
return drawableIDs.length;
}

public ObjectgetItem( int position){
// TODOAuto-generatedmethodstub
return drawableIDs[position];
}

public long getItemId( int position){
// TODOAuto-generatedmethodstub
return position;
}

public ViewgetView( int position,ViewconvertView,ViewGroupparent){
// TODOAuto-generatedmethodstub
LinearLayoutll = new LinearLayout(ctx);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setGravity(Gravity.CENTER_VERTICAL);
ImageViewiv
= new ImageView(ctx);
iv.setImageResource(drawableIDs[position]);
iv.setLayoutParams(
new ViewGroup.LayoutParams( 100 , 40 ));
ll.addView(iv);
TextViewtv
= 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};

MyAdapteradapter
= new MyAdapter( this ,phonePics,phones);
spinner.setAdapter(adapter);
spinner.setPrompt(
" test " );
spinner.setSelection(
0 , true );
}
运行结果截图:


OK,但使用自定义的Adapter,我们如何来获取选中的文本信息呢?
在MyAdapter中,修改getView方法,添加黄色区域代码如下:
public ViewgetView( int position,ViewconvertView,ViewGroupparent){
// TODOAuto-generatedmethodstub
LinearLayoutll = new LinearLayout(ctx);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setGravity(Gravity.CENTER_VERTICAL);
ImageViewiv
= new ImageView(ctx);
iv.setImageResource(drawableIDs[position]);
iv.setLayoutParams(
new ViewGroup.LayoutParams( 100 , 40 ));
ll.addView(iv);
TextViewtv
= new TextView(ctx);
tv.setText(stringIDs[position]);
tv.setTextSize(
14 );
tv.setTextColor(Color.BLUE);
tv.setTag( " tagTextView " );
ll.addView(tv);

return
ll;
}

重写事件中的onItemSelected方法:
// TODOAuto-generatedmethodstub
public void onItemSelected(AdapterView <?> adapterView,Viewview, int position,
long id){
if (adapterView.getId() == R.id.mySpinner)
{
LinearLayoutll
= (LinearLayout)view;
TextViewtv
= (TextView)ll.findViewWithTag( " tagTextView " );
Stringstr
= (String)tv.getText();
System.out.println(
" selected===========> " + str);
}
}

最后,别忘了注册该事件。=。=

更多相关文章

  1. 【ClassNotFoundExcept】Android应用程序启动时发生AndroidRunti
  2. Android(安卓)Device Monitor 报 open failed: Permission denie
  3. Android中利用画图类和线程画出闪烁的心形
  4. Android-中常用方法集锦
  5. Android(安卓)首选网络模式默认值的修改方法
  6. android 中如何限制 EditText 最大输入字符数(2)
  7. Android(安卓)Studio 快捷键(转)
  8. android 屏幕保持唤醒 不锁屏
  9. Android下使用activation发送邮件

随机推荐

  1. 使用Frida渗透Android(安卓)app
  2. Android(安卓)设计思想
  3. eclipse paho包对于ActiveMQ持久化订阅者
  4. 轻松理解 Android(安卓)Binder,只需要读这
  5. gRPC在Android中的应用、配置、生成文件
  6. Android新手如何快速开发一款app
  7. DNS负载均衡,导致Android和iOS访问接口,导
  8. 关于XRecyclerView重复下拉在MVP中崩溃
  9. android中对sd卡文件的管理
  10. Android开发之自定义View(视图)