Android Spinner

本文介绍了一个使用 Android Spinner 控件的示例应用。通过创建一个包含城市列表的 Spinner,并演示了如何从 List<KeyValue> 绑定数据到 Spinner 控件上,同时展示了如何设置 Spinner 的监听器以响应用户的选项选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)实现效果


2)关键代码

package com.example.test6;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.widget.*;
import android.view.*;

public class MainActivity extends Activity {
	private Spinner citySpinner=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		citySpinner=(Spinner)findViewById(R.id.citySpinner);
		/*生成List<KeyValue>*/
		List<KeyValue> cities=new ArrayList<KeyValue>();
		cities.add(new KeyValue(1, "上海"));
		cities.add(new KeyValue(2, "深圳"));
		cities.add(new KeyValue(3, "广州"));
		cities.add(new KeyValue(4, "杭州"));
		cities.add(new KeyValue(5, "苏州"));
		/*将List<KeyValue>绑定给Spinner*/
		ArrayAdapter<KeyValue> adapter=new ArrayAdapter<KeyValue>(this,android.R.layout.simple_spinner_item,cities);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		citySpinner.setAdapter(adapter);
		citySpinner.setSelection(cities.size()-1);
		citySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
			public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
				int key=((KeyValue)parent.getSelectedItem()).getKey();
				String value=((KeyValue)parent.getSelectedItem()).getValue();
			}
			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				
			}
		});
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}
class KeyValue {
	public KeyValue(){}
	public KeyValue(int _key, String _value){
		this.key=_key;
		this.value=_value;
	}
	private int key;
	private String value;
	/*为什么要重写toString()呢?因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString()*/
	@Override
	public String toString() {
	  return getValue();
	}
	public int getKey() {
		return key;
	}
	public void setKey(int key) {
		this.key = key;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
}

3)如果List<KeyValue>是从数据库中获取那么可以参考一下获取方式

/*查询数据, 返回key-value List对象*/
	public List<KeyValue> queryKeyValueList(String whereString){
		List<KeyValue> items=new ArrayList<KeyValue>();
		Cursor cursor=query(whereString);
		if(cursor.getCount()>0){
			while(cursor.moveToNext()){
				KeyValue item=new KeyValue();
				item.setKey(cursor.getInt(cursor.getColumnIndex("_id")));
				item.setValue(cursor.getString(cursor.getColumnIndex("description")));
				items.add(item);
			}
		}
		return items;
	}
### 使用 Android 中的 Spinner 控件 #### 创建并配置 Spinner 控件 在 XML 文件中声明 `Spinner` 组件时,可以为其指定样式和其他属性来调整外观。例如设置上下填充以及应用自定义风格: ```xml <Spinner ... android:paddingTop="15dp" android:paddingBottom="15dp" style="@style/customSpinnerStyle"/> ``` 此部分描述了如何在界面文件里引入带有特定样式的 `Spinner` 控件[^1]。 #### 关联适配器与数据源 为了向 `Spinner` 添加选项列表,需创建一个实现了 `SpinnerAdapter` 接口的对象,并将其传递给 `Spinner` 的 `setAdapter()` 方法。这一步骤使得能够指定 `Spinner` 显示的具体项目集合: ```java // 假设 sp1 是已初始化的 Spinner 实例 SpinnerAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, items); sp1.setAdapter(adapter); // 将 Adapter 和 Spinner 进行绑定 ``` 上述代码展示了怎样利用 `setAdapter()` 函数把 `SpinnerAdapter` 对象分配给名为 `sp1` 的 `Spinner` 变量[^2]。 #### 处理用户交互事件 为了让 `Spinner` 能响应用户的操作,比如改变所选项,则应注册一个监听器。下面的例子说明了如果检测到新项目的选取,会触发相应逻辑处理,如更改其他视图的状态或内容: ```java sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { // 当选择了一个新的 item 后执行的操作 TextView textView = findViewById(R.id.textViewId); String selectedColor = colors[position]; // 颜色数组中的位置对应的颜色字符串 textView.setTextColor(Color.parseColor(selectedColor)); } @Override public void onNothingSelected(AdapterView<?> parentView) { // 用户未做任何选择时可在此处编写默认行为 } }); ``` 这里演示的是通过监听 `onItemSelected` 事件更新另一个 `TextView` 的文本颜色至由 `Spinner` 所选定的颜色值[^3]. #### 应用场景举例 考虑构建一款简单的书籍浏览器应用,其中包含有多个可供挑选的书名作为 `Spinner` 下拉菜单里的条目;一旦用户做出选择,便会展示该书目的封面图像连同简介文字于屏幕下方区域。此类应用场景体现了 `Spinner` 在实际开发过程中的灵活性和实用性[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值