Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

来源:互联网 发布:模拟人生4网络人格 编辑:程序博客网 时间:2024/06/04 23:30

 今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现)

(一):使用ArrayAdapter进行适配数据:

   ①:首先定义一个布局文件:

[html] view plaincopy
  1. <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <Spinner  
  8.         android:id="@+id/spinner1"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.       />  
  12. </LinearLayout></span>  
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:16px;">  </span>  
  【注意:】上面的Spinner有两个属性1:prompt是初始的时候,Spinner显示的数据,是一个引用类型   2:entries是直接在xml布局文件中绑定数据源(可以不设置,即可以在Activity中动态绑定) 

         ②:建立数据源,使用数组,这些数据将会在Spinner下来列表中进行显示:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string-array name="spinnername">  
  4.         <item>北京</item>  
  5.         <item>上海 </item>  
  6.         <item>广州</item>  
  7.         <item>深圳</item>  
  8.     </string-array>  
  9. </resources></span>  
      

  ③:接着在Activity中加入如下的代码(使用了系统定义的下拉列表的布局文件,当然也可以自定义)


[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1.              // 初始化控件  
  2. mSpinner = (Spinner) findViewById(R.id.spinner1);  
  3. // 建立数据源  
  4. String[] mItems = getResources().getStringArray(R.array.spinnername);  
  5. // 建立Adapter并且绑定数据源  
  6. ArrayAdapter<String> _Adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems);  
  7. //绑定 Adapter到控件  
  8. mSpinner.setAdapter(_Adapter);  
        

以上代码初步完成,看下运行效果:

 

          下面是关于Spinner的点击事件(效果图如上图):

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1.      mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {  
  2. @Override  
  3. public void onItemSelected(AdapterView<?> parent, View view,  
  4.         int position, long id) {  
  5.     String str=parent.getItemAtPosition(position).toString();  
  6.     Toast.makeText(SpinnerActivity.this"你点击的是:"+str, 2000).show();  
  7. }  
  8. @Override  
  9. public void onNothingSelected(AdapterView<?> parent) {  
  10.     // TODO Auto-generated method stub  
  11. }  
  12. );  
 


       (二)使用自定义的Adapter(重点)

           ①:定义每一个Item的布局文件

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/textView1"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:drawableLeft="@drawable/ic_launcher"  
  12.         android:paddingRight="8dip"  
  13.         android:paddingTop="8dip"  
  14.         android:text="TextView"  
  15.         android:textSize="25sp" />  
  16.   
  17.     <TextView  
  18.         android:id="@+id/textView2"  
  19.         android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content"  
  21.         android:paddingLeft="8dip"  
  22.         android:paddingTop="8dip"  
  23.         android:text="TextView"  
  24.         android:textSize="25sp" />  
  25.   
  26. </LinearLayout>  

        ②:建立Person类:

  

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.jiangqq.csdn;  
  2. public class Person {  
  3.     private String personName;  
  4.     private String personAddress;  
  5.     public Person(String personName, String personAddress) {  
  6.         super();  
  7.         this.personName = personName;  
  8.         this.personAddress = personAddress;  
  9.     }  
  10.     public String getPersonName() {  
  11.         return personName;  
  12.     }  
  13.     public void setPersonName(String personName) {  
  14.         this.personName = personName;  
  15.     }  
  16.     public String getPersonAddress() {  
  17.         return personAddress;  
  18.     }  
  19.     public void setPersonAddress(String personAddress) {  
  20.         this.personAddress = personAddress;  
  21.     }  
  22.   
  23. }  
       ③:创建MyAdapter继承与BaseAdapter,进行适配:

    

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.jiangqq.csdn;  
  2.   
  3. import java.util.List;  
  4. import android.content.Context;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.BaseAdapter;  
  9. import android.widget.TextView;  
  10.   
  11. /** 
  12.  * 自定义适配器类 
  13.  * @author jiangqq  <a href=http://blog.csdn.net/jiangqq781931404></a> 
  14.  * 
  15.  */  
  16. public class MyAdapter extends BaseAdapter {  
  17.     private List<Person> mList;  
  18.     private Context mContext;  
  19.   
  20.     public MyAdapter(Context pContext, List<Person> pList) {  
  21.         this.mContext = pContext;  
  22.         this.mList = pList;  
  23.     }  
  24.   
  25.     @Override  
  26.     public int getCount() {  
  27.         return mList.size();  
  28.     }  
  29.   
  30.     @Override  
  31.     public Object getItem(int position) {  
  32.         return mList.get(position);  
  33.     }  
  34.   
  35.     @Override  
  36.     public long getItemId(int position) {  
  37.         return position;  
  38.     }  
  39.     /** 
  40.      * 下面是重要代码 
  41.      */  
  42.     @Override  
  43.     public View getView(int position, View convertView, ViewGroup parent) {  
  44.         LayoutInflater _LayoutInflater=LayoutInflater.from(mContext);  
  45.         convertView=_LayoutInflater.inflate(R.layout.item, null);  
  46.         if(convertView!=null)  
  47.         {  
  48.             TextView _TextView1=(TextView)convertView.findViewById(R.id.textView1);  
  49.             TextView _TextView2=(TextView)convertView.findViewById(R.id.textView2);  
  50.             _TextView1.setText(mList.get(position).getPersonName());  
  51.             _TextView2.setText(mList.get(position).getPersonAddress());  
  52.         }  
  53.         return convertView;  
  54.     }  
  55. }  

 ④:在Activity中加入如下代码:

   

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1.                 // 初始化控件  
  2. mSpinner = (Spinner) findViewById(R.id.spinner1);  
  3. // 建立数据源  
  4.    List<Person>  persons=new ArrayList<Person>();  
  5. persons.add(new Person("张三""上海 "));  
  6. persons.add(new Person("李四""上海 "));  
  7. persons.add(new Person("王五""北京" ));  
  8. persons.add(new Person("赵六""广州 "));  
  9. //  建立Adapter绑定数据源  
  10. MyAdapter _MyAdapter=new MyAdapter(this, persons);  
  11. //绑定Adapter  
  12. mSpinner.setAdapter(_MyAdapter);  
  运行效果如下截图:

  

      监听事件和第一种方法相同:

0 0
原创粉丝点击