Android自定义Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)
程序员文章站
2023-12-03 13:27:28
今天学习了spinner组件的使用,非常好用的一款组件,相当于从下拉列表中选择项目,今天收获颇多,下面给大家演示一下spinner的使用(分别使用arrayadapter和...
今天学习了spinner组件的使用,非常好用的一款组件,相当于从下拉列表中选择项目,今天收获颇多,下面给大家演示一下spinner的使用(分别使用arrayadapter和自定义adapter实现),具体内容如下。
(一):使用arrayadapter进行适配数据:
①:首先定义一个布局文件:
<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <spinner android:id="@+id/spinner1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </linearlayout></span>
【注意:】上面的spinner有两个属性1:prompt是初始的时候,spinner显示的数据,是一个引用类型 2:entries是直接在xml布局文件中绑定数据源(可以不设置,即可以在activity中动态绑定)
②:建立数据源,使用数组,这些数据将会在spinner下来列表中进行显示:
<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="spinnername"> <item>北京</item> <item>上海 </item> <item>广州</item> <item>深圳</item> </string-array> </resources></span>
③:接着在activity中加入如下的代码(使用了系统定义的下拉列表的布局文件,当然也可以自定义)
// 初始化控件 mspinner = (spinner) findviewbyid(r.id.spinner1); // 建立数据源 string[] mitems = getresources().getstringarray(r.array.spinnername); // 建立adapter并且绑定数据源 arrayadapter<string> _adapter=new arrayadapter<string>(this,android.r.layout.simple_spinner_item, mitems); //绑定 adapter到控件 mspinner.setadapter(_adapter);
以上代码初步完成,看下运行效果:
下面是关于spinner的点击事件(效果图如上图):
mspinner.setonitemselectedlistener(new onitemselectedlistener() { @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { string str=parent.getitematposition(position).tostring(); toast.maketext(spinneractivity.this, "你点击的是:"+str, 2000).show(); } @override public void onnothingselected(adapterview<?> parent) { // todo auto-generated method stub } });
(二)使用自定义的adapter(重点)
①:定义每一个item的布局文件
<?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:drawableleft="@drawable/ic_launcher" android:paddingright="8dip" android:paddingtop="8dip" android:text="textview" android:textsize="25sp" /> <textview android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingleft="8dip" android:paddingtop="8dip" android:text="textview" android:textsize="25sp" /> </linearlayout>
②:建立person类:
package com.jiangqq.csdn; public class person { private string personname; private string personaddress; public person(string personname, string personaddress) { super(); this.personname = personname; this.personaddress = personaddress; } public string getpersonname() { return personname; } public void setpersonname(string personname) { this.personname = personname; } public string getpersonaddress() { return personaddress; } public void setpersonaddress(string personaddress) { this.personaddress = personaddress; } }
③:创建myadapter继承与baseadapter,进行适配:
package com.jiangqq.csdn; import java.util.list; import android.content.context; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.textview; /** * 自定义适配器类 * @author jiangqq <a href=http://blog.csdn.net/jiangqq781931404></a> * */ public class myadapter extends baseadapter { private list<person> mlist; private context mcontext; public myadapter(context pcontext, list<person> plist) { this.mcontext = pcontext; this.mlist = plist; } @override public int getcount() { return mlist.size(); } @override public object getitem(int position) { return mlist.get(position); } @override public long getitemid(int position) { return position; } /** * 下面是重要代码 */ @override public view getview(int position, view convertview, viewgroup parent) { layoutinflater _layoutinflater=layoutinflater.from(mcontext); convertview=_layoutinflater.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(mlist.get(position).getpersonname()); _textview2.settext(mlist.get(position).getpersonaddress()); } return convertview; } }
④:在activity中加入如下代码:
// 初始化控件 mspinner = (spinner) findviewbyid(r.id.spinner1); // 建立数据源 list<person> persons=new arraylist<person>(); persons.add(new person("张三", "上海 ")); persons.add(new person("李四", "上海 ")); persons.add(new person("王五", "北京" )); persons.add(new person("赵六", "广州 ")); // 建立adapter绑定数据源 myadapter _myadapter=new myadapter(this, persons); //绑定adapter mspinner.setadapter(_myadapter);
运行效果如下截图:
上一篇: Rushmail:电商邮件营销的功能效果