Spinner 使用方法小结

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

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns: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>
<stringname="app_name">MySpinnerDemo</string>
<string-arrayname="phones_array">
<item>iPhone</item>
<item>Android</item>
<item>BlackBerry</item>
</string-array>
</resources>


Activity类:

packagecom.yinger;

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

/**
*SpinnerDemo
*
@authorYinger
*@time2011-7-9
下午01:54:59
*@mailmelody.crazycoding@gmail.com
*/

publicclassSpinnerDemoextendsActivity{
Spinnerspinner=
null;
Stringselected="0";

/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner=(Spinner)findViewById(R.id.mySpinner);
initMySpinner();
}

privatevoidinitMySpinner(){
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(
newSpinnerOnSelectedListener());
}

classSpinnerOnSelectedListenerimplementsOnItemSelectedListener{
publicvoidonItemSelected(AdapterView<?>adapterView,Viewview,intposition,
longid){
//TODOAuto-generatedmethodstub
selected=adapterView.getItemAtPosition(position).toString();
System.out.println("selected===========>"+selected);
}

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


二。debug发现的一个小问题:
Spinner在初始化时会自动调用一次OnItemSelectedListener事件
原因:有人说是Bug,其实这与C#的事件机制类似,懒得说了=。=
提供的解决办法:
个人是通过在事件注册之前调用

spinner.setSelection(0,true);

但要注意,使用此方法,如果用户选择的也是第一项,那么OnItemSelectedListener事件不会被触发……

三。使用技巧
1.动态添加Spinner的数据源
修改initMySpinner方法,代码如下:

privatevoidinitMySpinner(){
String[]phones={"iPhone","Android","BlackBerry"};
ArrayAdapter<String>adapter=
newArrayAdapter<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(
newSpinnerOnSelectedListener());
}


2.自定义Spinner的Layout,替换掉体统默认的android.R.layout.simple_spinner_item
super easy
my_spinner_item.xml:

<?xmlversion="1.0"encoding="utf-8"?>
<TextViewxmlns: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=newArrayAdapter<String>(
this,R.layout.my_spinner_item,
phones);

同理,可自定义layout,替换掉android.R.layout.simple_spinner_dropdown_item

3.同时显示图片和文本
自定义Adapter:

packagecom.yinger;

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

/**
*
自定义Adapter
*
@authorYinger
*@time2011-7-9
下午03:39:34
*@mailmelody.crazycoding@gmail.com
*/

publicclassMyAdapterextendsBaseAdapter{

privateContextctx;
privateintdrawableIDs[];
privateintstringIDs[];

publicMyAdapter(Contextctx,intDrawableIDs[],intStringIDs[])
{
this.ctx=ctx;
this.drawableIDs=DrawableIDs;
this.stringIDs=StringIDs;
}

publicintgetCount(){
//TODOAuto-generatedmethodstub
returndrawableIDs.length;
}

publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returndrawableIDs[position];
}

publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
returnposition;
}

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
//TODOAuto-generatedmethodstub
LinearLayoutll=newLinearLayout(ctx);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setGravity(Gravity.CENTER_VERTICAL);
ImageViewiv=
newImageView(ctx);
iv.setImageResource(drawableIDs[position]);
iv.setLayoutParams(
newViewGroup.LayoutParams(100,40));
ll.addView(iv);
TextViewtv=
newTextView(ctx);
tv.setText(stringIDs[position]);
tv.setTextSize(14);
tv.setTextColor(Color.BLUE);
ll.addView(tv);
returnll;
}
}


修改initMySpinner方法:

privatevoidinitMySpinner(){
int[]phonePics={R.drawable.apple,R.drawable.android,R.drawable.blackberry};
int[]phones={R.string.iphone,R.string.android,R.string.blackberry};

MyAdapteradapter=
newMyAdapter(this,phonePics,phones);
spinner.setAdapter(adapter);
spinner.setPrompt("test");
spinner.setSelection(0,
true);
}

OK,但使用自定义的Adapter,我们如何来获取选中的文本信息呢?
在MyAdapter中,修改getView方法,添加黄色区域代码如下:

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
//TODOAuto-generatedmethodstub
LinearLayoutll=newLinearLayout(ctx);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setGravity(Gravity.CENTER_VERTICAL);
ImageViewiv=
newImageView(ctx);
iv.setImageResource(drawableIDs[position]);
iv.setLayoutParams(
newViewGroup.LayoutParams(100,40));
ll.addView(iv);
TextViewtv=
newTextView(ctx);
tv.setText(stringIDs[position]);
tv.setTextSize(14);
tv.setTextColor(Color.BLUE);
tv.setTag("tagTextView");
ll.addView(tv);

return
ll;
}


重写事件中的onItemSelected方法:

//TODOAuto-generatedmethodstub
publicvoidonItemSelected(AdapterView<?>adapterView,Viewview,intposition,
longid){
if(adapterView.getId()==R.id.mySpinner)
{
LinearLayoutll=(LinearLayout)view;
TextViewtv=(TextView)ll.findViewWithTag("tagTextView");
Stringstr=(String)tv.getText();
System.out.println("selected===========>"+str);
}
}


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

更多相关文章

  1. 十七、Android学习笔记_Android(安卓)使用 搜索框
  2. Android(安卓)4.0.3 源码编译中添加外部jar包和外部so到apk的方
  3. Android(安卓)按钮点击两次触发不同的事件
  4. Android(安卓)编程下 Touch 事件的分发和消费机制
  5. Android中的dispatchTouchEvent()、onInterceptTouchEvent()和on
  6. Android四大基本组件介绍与生命周期
  7. android - edittext 默认隐藏软键盘
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 创建android画笔程序的样例(有镜面效果)
  2. 安卓中选择系统图库的图片及调用相机的源
  3. 在Android中将子View的坐标转换为父View
  4. android三种动画
  5. Android(安卓)多种ViewType的ListView
  6. Android CTS的TCL/Expect交互式自动化脚
  7. S5PV210 Android(安卓)fimc驱动分析 - fi
  8. Android 进阶——Material Design新控件
  9. Android进程保活(常驻内存)
  10. Android下拉列表spinner的实例代码