一般要继承BaseAdapter类,然后重写 getView(int position,View convertview,View parent);
我们先大概了解下三个参数的含义
1. postion 此item在listview的位置/顺序。
2.convertview item 就像是一个子布局,经过填充数据后,放在书架(listview)的a层上。
3.parent parent就是2种的a层。
优化主要在2中。
首先要得到一个layout,然后找到其中的对应组件,然后进行数据填充,然后返回layout。
convertview 就是每次inflate的layout。这个东西可以复用,就是如果赋过值,它就会一直存在。
所以,优化第一步,采用converview 来获取对应组件,然后进行数据填充。当然第一次converview为空,需要inlfate布局给它赋值。
如下
1
2
3
4
5
6
|
public View getView( int
position,View convertview,View parent){
if (convertview== null ) //第一次加载
{
convertview=inflater.inflate(R.layout.a, null );
}
} |
这样就不用每次都inflate了。
然后还需要做的事就是findViewById();来获取convertview的对应组件,进行数据填充。
这个时候也可以优化。使用ViewHolder ,把对应组件赋给它里面的对应属性。然后把它设置给convertview.这样每次获取对应组件,不用每次都findview...直接从convertview里面拿即可。
1
2
3
4
5
6
7
8
9
10
11
|
ViewHolder holder; if (convertview== null ){
....;
holder= new
ViewHolder();
holder.text=convertview.findViewById();
convertview.setTag(holder);
} else {
holder=(ViewHolder)convertview.getTag();
} holder.text.setText( "this is a apple" );
return
convertview;
|
这样能优化不少加载速度,减少内存使用。