控件——Spinner

   属性:
 android:spinnerMode = ""  下拉菜单的展示方式
 属性值:  dropdown  下拉方式(默认的)      
 dialog     对话框方式
 如果下拉方式是dialog: 那么可以指定标题 android:prompt="@string/title" (只能引用,不能直接写文字)
 android:entries="@array/books"  填充下拉菜单的内容。
填充方式
使用ArrayAdapter 来填充数据

适用场景 :  Item 只有一个文本, 不能显示图片
  数据源 :    String[] /  List<String>
  步骤 :
   1, 控件,  得到控件并且初始化
   2, 得到数据源
   3, 得到适配器

实例:

public class MainActivity extends Activity {
	private Spinner s1, s2;
	private String[] data = { "字母", "数字", "字符" };
	private Map<String, Object> map;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		s1 = (Spinner) findViewById(R.id.s1);
		s2 = (Spinner) findViewById(R.id.s2);

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, data);

		s1.setAdapter(adapter);

		map = new HashMap<String, Object>();
		map.put("字母", new String[] { "A", "B", "C" });
		map.put("数字", new String[] { "1", "2", "3" });
		map.put("字符", new String[] { "!", "@", "#" });

		s1.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				Object ob = map.get(data[position]);
				String[] s11 = (String[]) ob;
				ArrayAdapter<String> aaaa = new ArrayAdapter<String>(MainActivity.this, 
						R.layout.spinnerstyle, R.id.t1, s11);
				s2.setAdapter(aaaa);

			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				// TODO Auto-generated method stub

			}
		});

	}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/t1"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:background="#0f0"
        />

</LinearLayout>


使用SimpleAdapter 填充数据

  适用场景    图文混排,图片来自本地
  数据源     List<Map<String,Object>>
  步骤:   
   1, 控件,  得到控件并且初始化
   2, 得到数据源
   3, 得到适配器
   4, 为控件设置适配器
实例:
public class SimpleArraryActivity extends Activity {
	private Spinner spinner;
	private List<Map<String, Object>> list;
	private int[] icon = { R.drawable.ic_launcher, R.drawable.ic_launcher,
			R.drawable.ic_launcher, R.drawable.ic_launcher,
			R.drawable.ic_launcher, R.drawable.ic_launcher,
			R.drawable.ic_launcher, R.drawable.ic_launcher };
	private String[] name = { "蒋", "刘", "杨", "王", "李", "黄", "夏", "陈" };
	private int[] age = { 12, 23, 14, 16, 34, 23, 56, 20 };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_spanner);

		spinner = (Spinner) findViewById(R.id.spinner);

		list = new ArrayList<Map<String, Object>>();

		for (int i = 0; i < icon.length; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("icon", icon[i]);
			map.put("name", name[i]);
			map.put("age", age[i]);
			list.add(map);
		}
		// 定义适配器
		SimpleAdapter simAdapter = new SimpleAdapter(SimpleArraryActivity.this,
				list, R.layout.activity_simple_arrary, new String[] { "icon", "name",
						"age" }, new int[] { R.id.iv, R.id.t11, R.id.t12 });
		spinner.setAdapter(simAdapter);
	}

}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SimpleArraryActivity" >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/ic_launcher" />
    <TextView 
        android:id="@+id/t11"
        android:layout_marginLeft="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名"
        android:layout_toRightOf="@id/iv"
        android:textSize="18sp"
        android:layout_alignTop="@id/iv"/>
    <TextView 
        android:id="@+id/t12"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="年龄"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@id/iv"
        android:layout_below="@id/t11"
        android:textSize="18sp"
        android:layout_alignBottom="@id/iv"/>

</RelativeLayout>

监听器:
onItemSelectedListener

		spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

			/**
			 * AdapterView<?> parent	监听器的下拉列表对象
			 * View view			当前被选中的View
			 * int position			当前被选中条目的位置(从0开始)
			 * long id			当前被选中View的Id
			 */	
			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO 选中内容触发
				
				//从数据源中获取当前点击的内容
				String info = data.get(position);
				
				//从parent中获取当前点击的内容
				String info2 = parent.getItemAtPosition(position).toString();
				
				//从spinner中获取当前点击的内容
				String info3 = spinner.getItemAtPosition(position).toString();
				
				//从adapter中获取当前点击的内容
				String info4 = adapter.getItem(position);
				
				Toast.makeText(ArrayAdapterActivity.this, "info="+info+",info2="+info2+",info3="+info3+",info4="+info4, Toast.LENGTH_LONG).show();
				
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				// TODO 如果数据源清空后, 调用适配器的刷新方法时, 执行此方法
				
			}
		});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值