安卓spinner开发里面spinner里的onNothingSelected怎么用?举例说明

自定义Spinner五步走 - java-admin - ITeye技术网站
博客分类:
在Android的UI开发中,Spinner(下拉列表)总是可以用到的,一个简单的自定义Spinner制作我们只需要记住这重要的五步,一个Spinner就可以应用而生了。
(1)新建一个Android工程,名字为SpinnerTest1。修改layout下的main.xml,添加一个Textview和一个Spinner,文件内容如下:
android:id
"@+id/widget28"
android:layout_width
"fill_parent"
android:layout_height
"fill_parent"
android:orientation
"vertical"
xmlns:android
"/apk/res/android"
android:id
"@+id/TextView_Show"
android:layout_width
"fill_parent"
android:layout_height
"wrap_content"
android:text
"你选择的是"
android:textSize
android:id
"@+id/spinner_City"
android:layout_width
"fill_parent"
android:layout_height
"wrap_content"
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout
android:id="@+id/widget28"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="/apk/res/android" &
android:id="@+id/TextView_Show"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="你选择的是"
android:textSize="25sp"&
&/TextView&
android:id="@+id/spinner_City"
android:layout_width="fill_parent"
android:layout_height="wrap_content"&
&/Spinner&&!-- 定义一个下拉菜单--&
&/LinearLayout&
(2)修改你的SpinnerTest1类,在这里我们就要记住五步
来自定义一个Spinner了,完整代码及五步注释如下:
java.util.ArrayL
java.util.L
android.app.A
android.os.B
android.view.MotionE
android.view.V
android.view.View.OnTouchL
android.view.animation.A
android.view.animation.AnimationU
android.widget.AdapterV
android.widget.ArrayA
android.widget.S
android.widget.TextV
SpinnerTest1
Activity {
List&String& list =
ArrayList&String&();
TextView myTextV
Spinner myS
ArrayAdapter&String&
Animation myA
onCreate(Bundle savedInstanceState) {
.onCreate(savedInstanceState);
setContentView(R.layout.main);
list.add("北京"
list.add("上海"
list.add("深圳"
list.add("南京"
list.add("重庆"
myTextView = (TextView)findViewById(R.id.TextView_Show);
mySpinner = (Spinner)findViewById(R.id.spinner_City);
adapter = new
ArrayAdapter&String&(
,android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(adapter);
mySpinner.setOnItemSelectedListener(new
Spinner.OnItemSelectedListener(){
onItemSelected(AdapterView&?& arg0, View arg1,
myTextView.setText("您选择的是:"
+ adapter.getItem(arg2));
arg0.setVisibility(View.VISIBLE);
onNothingSelected(AdapterView&?& arg0) {
myTextView.setText("NONE"
arg0.setVisibility(View.VISIBLE);
mySpinner.setOnTouchListener(new
Spinner.OnTouchListener(){
onTouch(View v, MotionEvent event) {
v.setVisibility(View.INVISIBLE);
mySpinner.setOnFocusChangeListener(new
Spinner.OnFocusChangeListener(){
onFocusChange(View v,
hasFocus) {
v.setVisibility(View.VISIBLE);
package com.xtlh.
import java.util.ArrayL
import java.util.L
import android.app.A
import android.os.B
import android.view.MotionE
import android.view.V
import android.view.View.OnTouchL
import android.view.animation.A
import android.view.animation.AnimationU
import android.widget.AdapterV
import android.widget.ArrayA
import android.widget.S
import android.widget.TextV
public class SpinnerTest1 extends Activity {
/** Called when the activity is first created. */
private List&String& list = new ArrayList&String&();
private TextView myTextV
private Spinner myS
private ArrayAdapter&String&
private Animation myA
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//第一步:添加一个下拉列表项的list,这里添加的项就是下拉列表的菜单项
list.add("北京");
list.add("上海");
list.add("深圳");
list.add("南京");
list.add("重庆");
myTextView = (TextView)findViewById(R.id.TextView_Show);
mySpinner = (Spinner)findViewById(R.id.spinner_City);
//第二步:为下拉列表定义一个适配器,这里就用到里前面定义的list。
adapter = new ArrayAdapter&String&(this,android.R.layout.simple_spinner_item, list);
//第三步:为适配器设置下拉列表下拉时的菜单样式。
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//第四步:将适配器添加到下拉列表上
mySpinner.setAdapter(adapter);
//第五步:为下拉列表设置各种事件的响应,这个事响应菜单被选中
mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
public void onItemSelected(AdapterView&?& arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
/* 将所选mySpinner 的值带入myTextView 中*/
myTextView.setText("您选择的是:"+ adapter.getItem(arg2));
/* 将mySpinner 显示*/
arg0.setVisibility(View.VISIBLE);
public void onNothingSelected(AdapterView&?& arg0) {
// TODO Auto-generated method stub
myTextView.setText("NONE");
arg0.setVisibility(View.VISIBLE);
/*下拉菜单弹出的内容选项触屏事件处理*/
mySpinner.setOnTouchListener(new Spinner.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
/* 将mySpinner 隐藏,不隐藏也可以,看自己爱好*/
v.setVisibility(View.INVISIBLE);
/*下拉菜单弹出的内容选项焦点改变事件处理*/
mySpinner.setOnFocusChangeListener(new Spinner.OnFocusChangeListener(){
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
v.setVisibility(View.VISIBLE);
记住这五步后,一个Spinner就Ok了,其中在为Spinner的适配器设置下拉时的菜单样式时,我们可以自定义自己的样式,如果嫌麻烦,就直接用android.R.layout的,就如下面这样。
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
效果图如下:
/blog/627023
java-admin
浏览: 861239 次
来自: 陕西.西安
1065你是怎么解决的,突然数据库中所有的表全都都是1065! ...
&CLUSTERED   指明创建的索引为簇索引。如 ...
为什么我的出不来呢只出来一个文本域我的文件夹的名字是小写的对应 ...
引用[color=orange][/color]飞
这个字符串数组是有用的,如果是整形数组是无效的trackbacks-0
一、字典表,用来存放键值对信息
package com.ljq.import java.io.S@SuppressWarnings("serial")public class Dict implements Serializable {
public Dict() {
public Dict(Integer id, String text) {
this.text =
public Integer getId() {
public void setId(Integer id) {
public String getText() {
public void setText(String text) {
this.text =
* 为什么要重写toString()呢?
* 因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString()
public String toString() {
&&&&&&&&&&&
&&&&&&&&&&
二、activity类,绑定数据、获取选中的键值对
package com.ljq.import java.util.ArrayLimport java.util.Limport android.app.Aimport android.os.Bimport android.view.Vimport android.widget.AdapterVimport android.widget.ArrayAimport android.widget.Simport android.widget.Timport android.widget.AdapterView.OnItemSelectedLpublic class MainActivity extends Activity {
private Spinner myS
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mySpinner = (Spinner) findViewById(R.id.mySpinner);
List&Dict& dicts = new ArrayList&Dict&();
dicts.add(new Dict(1, "测试1"));
dicts.add(new Dict(2, "测试2"));
dicts.add(new Dict(3, "测试3"));
dicts.add(new Dict(4, "测试4"));
ArrayAdapter&Dict& adapter = new ArrayAdapter&Dict&(this,
android.R.layout.simple_spinner_item, dicts);
mySpinner.setAdapter(adapter);
mySpinner.setOnItemSelectedListener(new OnItemSelectedListener(){
public void onItemSelected(AdapterView&?& parent, View view,
int position, long id) {
// 获取键的方法:mySpinner.getSelectedItem().toString()或((Dict)mySpinner.getSelectedItem()).getId()
// 获取值的方法:((Dict)mySpinner.getSelectedItem()).getText();
Toast.makeText(MainActivity.this,
"键:" + mySpinner.getSelectedItem().toString() + "、" + ((Dict) mySpinner.getSelectedItem()).getId() +
",值:" + ((Dict) mySpinner.getSelectedItem()).getText(),
Toast.LENGTH_LONG).show();
public void onNothingSelected(AdapterView&?& parent) {
&&&&&&&&&&&
三、修改main.xml布局文件
&?xml version="1.0" encoding="utf-8"?&&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"&
&Spinner android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mySpinner"/&&/LinearLayout&
&&&&&&&&&&
&&&&&&&&&&&
四、运行结果如下:
阅读(...) 评论()自定义Spinner样式 - 短裤党 - ITeye技术网站
博客分类:
通常情况下spinner都采用系统默认的android.R.layout.simple_spinner_item和android.R.layout.simple_spinner_dropdown_item
有时候也需要自定义这两个文件
比如我这里是spinner_item.xml,这个是下拉列表的item样式
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:gravity="center_vertical"
&ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ico_hook"
android:layout_marginLeft="20dp"
android:visibility="invisible"
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/gray3"
android:textSize="@dimen/font_big"
android:layout_marginLeft="20dp"
&/LinearLayout&
另一个是:spinner.xml,注意这里的CheckedTextView id必须是@android:id/text1
&?xml version="1.0" encoding="utf-8"?&
&CheckedTextView xmlns:android="/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/black"
android:textSize="@dimen/font_xbig"
android:singleLine="true"
这个是控制spinner样式的。
至于spinner的背景可以这样控制:spinner_selector.xml
&?xml version="1.0" encoding="utf-8"?&
&selector xmlns:android="/apk/res/android" &
&item android:state_pressed="true"
android:drawable="@drawable/spinner_pressed" /&&!--按下时效果--&
&item android:state_pressed="false"
android:drawable="@drawable/spinner_normal" /&&!--默认效果--&
&/selector&
引用背景:
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/spinner_selector"
至于怎么使用spinner_item.xml和spinner.xml两个文件看下面的代码:
需要重写ArrayAdapter的getDropDownView(int position, View convertView, ViewGroup parent)方法。
ArrayList&String& list = new ArrayList&String&();
list.add("1人");
list.add("2人");
list.add("3人");
list.add("4人");
list.add("5人");
list.add("6人");
list.add("7人");
list.add("8人");
list.add("9人");
list.add("10人");
spinner=(Spinner)findViewById(R.id.spinner);
ArrayAdapter&String& adapter = new ArrayAdapter&String&(this,R.layout.spinner, list){
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
convertView = getLayoutInflater().inflate(R.layout.spinner_item, parent, false);
TextView label = (TextView) convertView.findViewById(R.id.label);
label.setText(getItem(position));
ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
icon.setVisibility(spinner.getSelectedItemPosition() == position?View.VISIBLE:View.INVISIBLE);
return convertV
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
public void onItemSelected(AdapterView&?& parent, View view, int position, long id) {
// TODO Auto-generated method stub
public void onNothingSelected(AdapterView&?& parent) {
// TODO Auto-generated method stub
完成之后,类似下面的样子(效果图是我网上找的,我懒得截图了):
下拉列表类似:
浏览 18930
gundumw100
浏览: 2582870 次
来自: 上海
感谢楼主分享,正好解决了我的问题。不过发现,重写ViewPag ...
一级苦工 写道弱弱的问一句,第一种方法能监听到用户是否点击发送 ...
弱弱的问一句,第一种方法能监听到用户是否点击发送按钮并成功发送 ...
楼主牛叉。15:11 提问
如何把spinner中的dropdown item存储到sqlite数据库?
我想存储 spinner中的dropdown值到数据库。我可以按照android开发网站的说明中获得dropdown,但是当用户点击保存按钮时,不能把dropdown的值存储到数据库中。请问如何把spinner中的dropdown item存储到sqlite数据库?
我用的是下面的代码:
public class Akshay extends Activity
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Spinner For Selecting Room
Spinner spinner_room = (Spinner) findViewById(R.id.spinner_for_Room_type_screen_2);
ArrayAdapter adapter_room = ArrayAdapter.createFromResource(this,
R.array.room_array, android.R.layout.simple_spinner_item);
adapter_room.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_room.setAdapter(adapter_room);
spinner_room.setOnItemSelectedListener(new MyOnItemSelectedListener_room());
// Listener Implementation of Spinner For Selecting Room
public class MyOnItemSelectedListener_room implements OnItemSelectedListener
public void onItemSelected(AdapterView parent, View view, int pos, long id)
public void onNothingSelected(AdapterView parent)
{ // Do nothing.}
按赞数排序
public class Akshay extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.configuration);
// Spinner For Selecting Room
Spinner spinner_room = (Spinner) findViewById(R.id.spinner_for_Room_type_screen_2);
ArrayAdapter&CharSequence& adapter_room = ArrayAdapter.createFromResource(this,
R.array.room_array,android.R.layout.simple_spinner_item);
adapter_room.setDropDownViewResourc(android.R.layout.simple_spinner_dropdown_item);
spinner_room.setAdapter(adapter_room);
spinner_room.setOnItemSelectedListener(new Listener_Of_Selecting_Room_Spinner());
// Listener Implementation of Spinner For Selecting Room
public static class Listener_Of_Selecting_Room_Spinner implements OnItemSelectedListener
static String RoomT
public void onItemSelected(AdapterView&?& parent, View view, int pos,long id)
// By using this you can get the position of item which you
// have selected from the dropdown
RoomType = (parent.getItemAtPosition(pos)).toString();
public void onNothingSelected(AdapterView&?& parent)
// Do nothing.
// Listener Implementation For Saving Number Of Board
private OnClickListener btnListener_Btn_Save_Room_Board = new OnClickListener()
public void onClick(View view)
DBAdapter dbAdapter1 = new DBAdapter(view.getContext());
dbAdapter1.createDataBase();
dbAdapter1.openDataBase();
// Here i am using the object RoomType which i have got from
// the Listener of spinner
room = Listener_Of_Selecting_Room_Spinner.RoomT
ContentValues initialValues1 = new ContentValues();
initialValues1.put("RoomType", room);
//Here i am storing it(RoomType) to the database
dbAdapter1.InsertNumberOfBoardInDB("Configuration", null,initialValues1);
catch (Exception e) {
dbAdapter1.close();
public static final String PREFS_NAME = "MyPrefsFile";
public static final String SPINNER_VALUE = "SPINNER VALUE";
SharedPreferences settings = getSharedPreferences(PREFS_NAME , 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(SPINNER_VALUE, &the spinner value&);
其他相似问题
相关参考资料Spinner用来显示列表项,类似于一组单选框RadioButton.下面瞥一下它的效果。
    Spinner是一个每次只能选择所有项的一个项的控件。它的项来自于与之相关联的适配器中。
二、重要属性
    android:prompt:当Spinner对话框关闭时显示该提示
三、重要方法
    setPrompt(CharSequence prompt):设置当Spinner对话框关闭时显示的提示
    performClick():如果它被定义就调用此视图的OnClickListener
    setOnItemClickListener(AdapterView.OnItemClickListener l):当项被点击时调用
    onDetachedFromWindow():当Spinner脱离窗口时被调用。
四、完整代码
public class SpinnerDemo extends Activity {&& @Override&&&& public void onCreate(Bundle savedInstanceState) {&&&&&&&& super.onCreate(savedInstanceState);&&&&&&&& setContentView(R.layout.spinnerpage);
&&&&&&&& Spinner s1 = (Spinner) findViewById(R.id.spinnercolor);&&&&&&&& ArrayAdapter&CharSequence& adapter = ArrayAdapter.createFromResource(&&&&&&&&&&&&&&&& this, R.array.colors, android.R.layout.simple_spinner_item);&&&&&&&& adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);&&&&&&&& s1.setAdapter(adapter);&&&&&&&& s1.setOnItemSelectedListener(&&&&&&&&&&&&&&&& new OnItemSelectedListener() {&&&&&&&&&&&&&&&&&&&& public void onItemSelected(&&&&&&&&&&&&&&&&&&&&&&&&&&&& AdapterView&?& parent, View view, int position, long id) {&&&&&&&&&&&&&&&&&&&&&&&& showToast("Spinner1: position=" + position + " id=" + id);&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&& public void onNothingSelected(AdapterView&?& parent) {&&&&&&&&&&&&&&&&&&&&&&&& showToast("Spinner1: unselected");&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& });
&&&&&&&& Spinner s2 = (Spinner) findViewById(R.id.spinnerplanet);&&&&&&&& adapter = ArrayAdapter.createFromResource(this, R.array.planets,&&&&&&&&&&&&&&&& android.R.layout.simple_spinner_item);&&&&&&&& adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);&&&&&&&& s2.setAdapter(adapter);&&&&&&&& s2.setOnItemSelectedListener(&&&&&&&&&&&&&&&& new OnItemSelectedListener() {&&&&&&&&&&&&&&&&&&&& public void onItemSelected(&&&&&&&&&&&&&&&&&&&&&&&&&&&& AdapterView&?& parent, View view, int position, long id) {&&&&&&&&&&&&&&&&&&&&&&&& showToast("Spinner2: position=" + position+1 + " id=" + id+1);&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&& public void onNothingSelected(AdapterView&?& parent) {&&&&&&&&&&&&&&&&&&&&&&&& showToast("Spinner2: unselected");&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&& });&&&& }&& &private void showToast(CharSequence msg) {&&&&&&&& Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();&&&& }}
阅读(...) 评论()

我要回帖

更多关于 安卓spinner用法 的文章

 

随机推荐