您的位置:首页 > 移动开发 > Android开发

Android开发之ListView 适配器(Adapter)优化

2011-05-20 22:16 525 查看
Android开发之ListView 适配器(Adapter)优化

ListView的Adapter的作用如下图所示:



Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?

先看看下面的代码:

public
View
getView(
int
position, View
convertView, ViewGroup parent)
{

View
item =
mInflater.inflate
(
R.layout
.list_item_icon_text
, null
)
;

(
(
TextView)
item.findViewById
(
R.id
.text
)
)
.setText
(
DATA[
position]
)
;

(
(
ImageView)
item.findViewById
(
R.id
.icon
)
)
.setImageBitmap
(

(
position &
1
)
==
1
?
mIcon1 :
mIcon2)
;

return
item;

}


怎么样?如果超过1000000项时,后果不堪设想!您可千万别这么写!
我们再来看看下面的代码:

public
View
getView(
int
position, View
convertView, ViewGroup parent)
{

if
(
convertView ==
null
)
{

convertView =
mInflater.inflate
(
R.layout
.item
, null
)
;

}

(
(
TextView)
convertView.findViewById
(
R.id
.text
)
)
.setText
(
DATA[
position]
)
;

(
(
ImageView)
convertView.findViewById
(
R.id
.icon
)
)
.setImageBitmap
(

(
position &
1
)
==
1
?
mIcon1 :
mIcon2)
;

return
convertView;

}


怎么样,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。
还有没有优化的方法呢? 答案是肯定的:

public
View
getView(
int
position, View
convertView, ViewGroup parent)
{

ViewHolder holder;

if
(
convertView ==
null
)
{

convertView =
mInflater.inflate
(
R.layout
.list_item_icon_text
, null
)
;

holder =
new
ViewHolder(
)
;

holder.text
=
(
TextView)
convertView.findViewById
(
R.id
.text
)
;

holder.icon
=
(
ImageView)
convertView.findViewById
(
R.id
.icon
)
;

convertView.setTag
(
holder)
;

}
else
{

holder =
(
ViewHolder)
convertView.getTag
(
)
;

}

holder.text
.setText
(
DATA[
position]
)
;

holder.icon
.setImageBitmap
(
(
position &
1
)
==
1
?
mIcon1 :
mIcon2)
;

return
convertView;

}

static
class
ViewHolder {

TextView text;

ImageView icon;

}


怎么样?会不会又给您的系统带来很大的提升呢?看看下面三种方式的性能对比图您就知道了!



本文是Google I/O 2009 Romain Guy 所讲的内容,这里只做简单介绍,相信一看代码就能看懂!有问题请留言!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: