Spinner的学习

第一次学Spinner控件,想记录一些东西,我是参考http://blog.csdn.net/developer_jiangqq/article/details/7285623这篇文章进行学习的,只是想将自己理解的东西记录下来

 

想实现的功能:想看一下下拉菜单Spinner长什么样,就做了个实例

 

要做的事:(都比较简单)

1、在布局文件添加Spinner控件

2、为Spinner的显示准备数据

3、设置适配器

4、监听事件

 

代码:

在xml文件中添加组件,说明宽高属性就可以

 

<Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

在value文件夹中新建xml文件,为显示准备数据

 

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="spinnername">
        <item>北京</item>
        <item>上海</item>
        <item>广州</item>
        <item>深圳</item>
        <item>汕尾</item>
    </string-array>
</resources>

 

 

 

spinner = (Spinner)findViewById(R.id.spinner);
//获取数据
String[] mItems = getResources().getStringArray(R.array.spinnername);
//创建适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mItems);
//设置适配器
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
          int position, long id) {
      Log.d("Spinner", "onItemSelected方法里面,position:"+position);
      String string = parent.getItemAtPosition(position).toString();
      Toast.makeText(MainActivity.this, "你点击的是:"+string, 2000).show();
   }

   @Override
   public void onNothingSelected(AdapterView<?> parent) {
      Log.d("Spinner", "onNothingSelected方法里面");
   }
});

 

监听事件是重写两个方法,注意监听接口不是setOnItemOnClickListener

 

 

 

log显示的是:     onItemSelected方法里面,position:4

但是onNothingSelected方法里面的log并没有显示,并且一开始就已经默认选中postion为0的第一个,所以该方法没有被调用

 

结果

 

 

 

//-------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------

上面是实现一个最简单的一个Spinner 的显示,除此之外我们还可以自定义适配器,这样就可以设置下拉菜单中子项中的布局,更加灵活

 

要实现的功能是:自定义适配器实现菜单自定义布局

 

要做的事:

1、创建菜单布局文件

2、创建Person类

3、自定义适配器

3、设置并显示以及监听事件都是跟上面一样的

 

代码:

在layout文件夹中创建菜单布局文件item.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"/>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

创建Person类作为数据提供

 

 

package com.example.spinnerte;

public class Person {

	String personName="";
	String address="";
	
	public Person(String personName, String address){
		super();
		this.address = address;
		this.personName = personName;
	}
	
	public String getPersonName() {
		return personName;
	}
	
	public void setPersonName(String personName) {
		this.personName = personName;
	}
	
	public String getAddress() {
		return address;
	}
	
	public void setAddress(String address) {
		this.address = address;
	}
	
}

 

创建适配器,继承BaseAdapter,作为内部类放在MainActivity里面

 

class MyAdapter extends BaseAdapter{

    	List<Person> list;
    	Context context;
    	
    	public MyAdapter(Context context, List<Person> list){
    		this.context = context;
    		this.list = list;
    	}
    	
		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public Object getItem(int position) {
			return list.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			LayoutInflater inflater = LayoutInflater.from(context);
			convertView = inflater.inflate(R.layout.item, null);
			if(convertView != null){
				TextView textView1 = (TextView)convertView.findViewById(R.id.textView1);
				TextView textView2 = (TextView)convertView.findViewById(R.id.textView2);
				textView1.setText(list.get(position).getPersonName());
				textView2.setText(list.get(position).getAddress());
			}
			return convertView;
		}
    	
    }

 

 

List<Person> list = new ArrayList<Person>();
        list.add(new Person("名字1","地址1"));
        list.add(new Person("名字2","地址2"));
        list.add(new Person("名字3","地址3"));
        list.add(new Person("名字4","地址4"));
        MyAdapter adapter2 = new MyAdapter(this, list);
        
        spinner.setAdapter(adapter2);

 

 

 

 

 

 

结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值