首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Spinner 使用方法总结

2012-07-28 
Spinner 使用方法小结android里的Spinner其实就是个ComboBox 。一。基本使用方法:main.xml 不多解释 ?xml

Spinner 使用方法小结

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

Spinner 使用方法总结<?xml?version="1.0"?encoding="utf-8"?>
Spinner 使用方法总结<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"
Spinner 使用方法总结????android:orientation="vertical"
Spinner 使用方法总结????android:layout_width="fill_parent"
Spinner 使用方法总结????android:layout_height="fill_parent"
Spinner 使用方法总结????>
Spinner 使用方法总结<Spinner
Spinner 使用方法总结?????android:id?=?"@+id/mySpinner"
Spinner 使用方法总结?????android:layout_width?=?"fill_parent"
Spinner 使用方法总结?????android:layout_height?="wrap_content"
Spinner 使用方法总结?????/>
Spinner 使用方法总结</LinearLayout>
Spinner 使用方法总结


在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(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:

<?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(100,?40));?
????????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(0,?true);
????}

运行结果截图:
Spinner 使用方法总结Spinner 使用方法总结

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(100,?40));?
????????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);
????????????}
????????}


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

?

?

转自:http://www.blogjava.net/crazycoding/archive/2011/07/09/353981.html

热点排行