`

Spinner 使用方法小结

阅读更多

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

运行结果截图:


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

分享到:
评论

相关推荐

    spinner的带图片的代码实现

    Spinner 使用方法小结 private void initMySpinner() { ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.phones_array, android.R.layout.simple_spinner_item); adapter....

    Android中常见的弹框:Spinner、Dialog、PopupMenu、PopupWindow

    Android中常见的弹框:Spinner、Dialog、PopupMenu、PopupWindow等控件基本使用总结

    Android使用Spinner实现城市级联下拉框

    最近写一个使用Spinner实现城市级联下拉框的Dome,现在总结一下,第一次写博客,互相学习。 activity_main.xml里面有三个Spinner &lt;LinearLayout xmlns:android=http://schemas.android.com/apk/res/android ...

    Android编程下拉菜单spinner用法小结(附2则示例)

    本文较为详细的总结分析了Android编程下拉菜单spinner用法。分享给大家供大家参考,具体如下: Spinner控件也是一种列表类型的控件,它的继承关系如下: java.lang.Object  ↳ android.view.View  ↳ android....

    Android编程入门很简单.(清华出版.王勇).part2

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    Android编程入门很简单.(清华出版.王勇).part1

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    精通ANDROID 3(中文版)1/2

    1.8 小结  第2章 设置开发环境  2.1 设置环境  2.1.1 下载JDK 6  2.1.2 下载Eclipse 3.6  2.1.3 下载Android SDK  2.1.4 命令行窗口  2.1.5 安装ADT  2.2 了解基本组件  2.2.1 View  2.2.2 ...

    精通Android 3 (中文版)2/2

    1.8 小结  第2章 设置开发环境  2.1 设置环境  2.1.1 下载JDK 6  2.1.2 下载Eclipse 3.6  2.1.3 下载Android SDK  2.1.4 命令行窗口  2.1.5 安装ADT  2.2 了解基本组件  2.2.1 View  2.2.2 ...

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

    Ext Js权威指南(.zip.001

    1.6 本章小结 / 33 .第2章 从“hello world”开始 / 34 2.1 获取ext js 4 / 34 2.2 配置使用ext js库 / 35 2.3 编写“hello world”程序 / 37 2.4 关于ext.onready / 38 2.5 关于ext.blank_image_url / 40 ...

    疯狂Android讲义源码

     1.7 本章小结 33  第2章 Android应用的界面编程 35  2.1 界面编程与视图(View)组件 36  2.1.1 视图组件与容器组件 36  2.1.2 使用XML布局文件控制UI  界面 40  2.1.3 在代码中控制UI界面 41  2.1.4 使用...

    疯狂Android讲义.part2

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 ...19.10 本章小结 689

    疯狂Android讲义.part1

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 ...19.10 本章小结 689

    《Android应用开发揭秘》附带光盘代码.

    《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言  第一部分 准备篇  第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架 ... 17.4小结

    《Android应用开发揭秘》源码

    作者简介  杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。... 17.4小结

    Android典型技术模块开发详解

    目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK ...16.7 本章小结

Global site tag (gtag.js) - Google Analytics