zoukankan      html  css  js  c++  java
  • Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) .

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

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

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

    01 <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>
    02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    03     android:layout_width="fill_parent"
    04     android:layout_height="fill_parent"
    05     android:orientation="vertical" >
    06  
    07     <Spinner
    08         android:id="@+id/spinner1"
    09         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"
    11       />
    12 </LinearLayout></span>

      【注意:】上面的Spinner有两个属性1:prompt是初始的时候,Spinner显示的数据,是一个引用类型   2:entries是直接在xml布局文件中绑定数据源(可以不设置,即可以在Activity中动态绑定) 

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

    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中加入如下的代码(使用了系统定义的下拉列表的布局文件,当然也可以自定义)

    1        // 初始化控件
    2 mSpinner = (Spinner) findViewById(R.id.spinner1);
    3 // 建立数据源
    4 String[] mItems = getResources().getStringArray(R.array.spinnername);
    5 // 建立Adapter并且绑定数据源
    6 ArrayAdapter<String> _Adapter=newArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems);
    7 //绑定 Adapter到控件
    8 mSpinner.setAdapter(_Adapter);

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

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

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

    01 mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    02     @Override
    03     public void onItemSelected(AdapterView<?> parent, View view,
    04             int position, long id) {
    05         String str=parent.getItemAtPosition(position).toString();
    06         Toast.makeText(SpinnerActivity.this"你点击的是:"+str, 2000).show();
    07     }
    08     @Override
    09     public void onNothingSelected(AdapterView<?> parent) {
    10         // TODO Auto-generated method stub
    11     }
    12 });

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

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

    01 <?xml version="1.0" encoding="utf-8"?>
    02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    03     android:layout_width="match_parent"
    04     android:layout_height="match_parent"
    05     android:orientation="horizontal" >
    06  
    07     <TextView
    08         android:id="@+id/textView1"
    09         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类:

    01 package com.jiangqq.csdn;
    02 public class Person {
    03     private String personName;
    04     private String personAddress;
    05     public Person(String personName, String personAddress) {
    06         super();
    07         this.personName = personName;
    08         this.personAddress = personAddress;
    09     }
    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,进行适配:

    01 package com.jiangqq.csdn;
    02  
    03 import java.util.List;
    04 import android.content.Context;
    05 import android.view.LayoutInflater;
    06 import android.view.View;
    07 import android.view.ViewGroup;
    08 import android.widget.BaseAdapter;
    09 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中加入如下代码:

    01        // 初始化控件
    02 mSpinner = (Spinner) findViewById(R.id.spinner1);
    03 // 建立数据源
    04 List<Person>  persons=new ArrayList<Person>();
    05 persons.add(new Person("张三""上海 "));
    06 persons.add(new Person("李四""上海 "));
    07 persons.add(new Person("王五""北京" ));
    08 persons.add(new Person("赵六""广州 "));
    09 //  建立Adapter绑定数据源
    10 MyAdapter _MyAdapter=new MyAdapter(this, persons);
    11 //绑定Adapter
    12 mSpinner.setAdapter(_MyAdapter);

    运行效果如下截图:

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

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

  • 相关阅读:
    h5 喜帖
    h5 录音
    UglifyJS-- 对你的js做了什么
    SimpleCaptcha生成图片验证码内容为乱码
    Spring.profiles多环境配置最佳实践
    eclipse maven 导出项目依赖的jar包
    cygwin下切换到其他磁盘
    chrome 浏览器的插件权限有多大?
    windows系统tomcat日志输出至catalina.out配置说明
    Windows10远程报错:由于CredSSP加密Oracle修正
  • 原文地址:https://www.cnblogs.com/tfy1332/p/3656103.html
Copyright © 2011-2022 走看看