今天学习了spinner组件的使用,非常好用的一款组件,相当于从下拉列表中选择项目,今天收获颇多,下面给大家演示一下spinner的使用(分别使用arrayadapter和自定义adapter实现),具体内容如下。
(一):使用arrayadapter进行适配数据:
①:首先定义一个布局文件:
1
2
3
4
5
6
7
8
9
10
11
12
|
<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下来列表中进行显示:
1
2
3
4
5
6
7
8
9
|
<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中加入如下的代码(使用了系统定义的下拉列表的布局文件,当然也可以自定义)
1
2
3
4
5
6
7
8
|
// 初始化控件
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的点击事件(效果图如上图):
1
2
3
4
5
6
7
8
9
10
11
12
|
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的布局文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?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类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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,进行适配:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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中加入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
// 初始化控件
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);
|
运行效果如下截图: