首页 > 系统 > Android > 正文

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

2019-10-24 20:35:50
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Android自定义Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)的相关资料,需要的朋友可以参考下

今天学习了Spinner组件的使用,非常好用的一款组件,相当于从下拉列表中选择项目,今天收获颇多,下面给大家演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现),具体内容如下。

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

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

 

 
  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> 

【注意:】上面的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=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems); 
  7. //绑定 Adapter到控件 
  8. mSpinner.setAdapter(_Adapter); 

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

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

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

 

 
  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. @Override 
  8. public void onNothingSelected(AdapterView<?> parent) { 
  9. // TODO Auto-generated method stub 
  10. }); 

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

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

 

 
  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. <TextView 
  7. android:id="@+id/textView1" 
  8. android:layout_width="wrap_content" 
  9. android:layout_height="wrap_content" 
  10. android:drawableLeft="@drawable/ic_launcher" 
  11. android:paddingRight="8dip" 
  12. android:paddingTop="8dip" 
  13. android:text="TextView" 
  14. android:textSize="25sp" /> 
  15. <TextView 
  16. android:id="@+id/textView2" 
  17. android:layout_width="wrap_content" 
  18. android:layout_height="wrap_content" 
  19. android:paddingLeft="8dip" 
  20. android:paddingTop="8dip" 
  21. android:text="TextView" 
  22. android:textSize="25sp" /> 
  23. </LinearLayout> 

②:建立Person类:

 

 
  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. public String getPersonName() { 
  10. return personName; 
  11. public void setPersonName(String personName) { 
  12. this.personName = personName; 
  13. public String getPersonAddress() { 
  14. return personAddress; 
  15. public void setPersonAddress(String personAddress) { 
  16. this.personAddress = personAddress; 
  17.  

③:创建MyAdapter继承与BaseAdapter,进行适配:

 

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

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

 

 
  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); 

运行效果如下截图:

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表