listview 简介
listview 是安卓里常用的控件, 本文介绍一下常用用法,以及优化等方法
1、改写activity_main.xml
1
2
3
4
5
6
7
8
9
10
|
<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:layout_width= "match_parent"
android:layout_height= "match_parent" >
<listview
android:id= "@+id/listview"
android:layout_width= "match_parent"
android:layout_height= "match_parent" />
</linearlayout>
|
2、新建一个javabean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package com.example.tomchen.testlistview;
public class icon {
private int imageid;
private string name;
public icon(string name, int imageid) {
this .name = name;
this .imageid = imageid;
}
public string getname() {
return name;
}
public int getimageid() {
return imageid;
}
}
|
3、新建icon_item.xml 用于 listview 每个元素的视图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?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/text"
android:layout_width= "wrap_content"
android:layout_height= "match_parent" />
<imageview
android:id= "@+id/icon"
android:layout_width= "wrap_content"
android:layout_height= "match_parent" />
</linearlayout>
|
4、新建一个class iconadapter 继承自 arrayadapter
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
|
package com.example.tomchen.testlistview;
import android.content.context;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.widget.arrayadapter;
import android.widget.imageview;
import android.widget.textview;
import java.util.list;
public class iconadapter extends arrayadapter<icon> {
private int resourceid;
public iconadapter(context context, int resource, list<icon> icons) {
super (context, resource, icons);
this .resourceid = resource;
}
@override
public view getview( int position, view convertview, viewgroup parent) {
icon icon = getitem(position);
view view;
if (convertview == null ) {
view = layoutinflater.from(getcontext()).inflate(resourceid, null );
} else {
view = convertview;
}
imageview image = (imageview) view.findviewbyid(r.id.icon);
image.setimageresource(icon.getimageid());
textview text = (textview) view.findviewbyid(r.id.text);
text.settext(icon.getname());
return view;
}
}
|
note
这儿有了一个优化, convertview 将之前的布局进行缓存, 以便之后进行重用.
所以我们判断convertview是否为空. 空的话就使用layoutinflater去加载布局, 否则的话就直接复用convertview
测试listview
mainactivity里面加入下面代码
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
|
package com.example.tomchen.testlistview;
import android.support.v7.app.appcompatactivity;
import android.os.bundle;
import android.view.menu;
import android.view.menuitem;
import android.widget.listview;
import java.util.arraylist;
import java.util.list;
public class mainactivity extends appcompatactivity {
private listview listview;
private list<icon> icons = new arraylist<icon>();
@override
protected void oncreate(bundle savedinstancestate) {
super .oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
listview = (listview) findviewbyid(r.id.listview);
icons.add( new icon( "icon_01" , r.drawable.ic_01));
icons.add( new icon( "icon_02" , r.drawable.ic_02));
icons.add( new icon( "icon_03" , r.drawable.ic_03));
icons.add( new icon( "icon_04" , r.drawable.ic_04));
icons.add( new icon( "icon_05" , r.drawable.ic_05));
icons.add( new icon( "icon_06" , r.drawable.ic_06));
icons.add( new icon( "icon_07" , r.drawable.ic_07));
icons.add( new icon( "icon_08" , r.drawable.ic_08));
icons.add( new icon( "icon_09" , r.drawable.ic_09));
iconadapter adapter = new iconadapter( this , r.layout.icon_item, icons);
listview.setadapter(adapter);
}
}
|
效果图如下:
以上就是本文的全部内容,希望对大家的学习android程序设计有所帮助。