Android--ListView 更高效的使用 Adapter
【摘要】
一、Adapter Adapter是ListView和数据源之间的中间人。 当每条数据进入可见区时,adapter会调用他的getView()方法,并返回代表具体数据的视图。滚动的时候频繁调用,支持成千上万的数据。 ①、最简单的方法,最慢最不实用 public void getView(int position , Vie...
一、Adapter
Adapter是ListView和数据源之间的中间人。
当每条数据进入可见区时,adapter会调用他的getView()方法,并返回代表具体数据的视图。滚动的时候频繁调用,支持成千上万的数据。
①、最简单的方法,最慢最不实用
-
public void getView(int position , View convertView , ViewGroup parent){
-
View item = mInflater.inflate(R.layout.list_view, null);
-
(TextView)item.findViewById(R.id.text).setText(DATA[position]);
-
(ImageView)item.findViewById(R.id.img).setImageBitmap(icon);
-
return item;
-
}
②、利用convertView回收视图,效率提高200%
-
public void getView(int position , View convertView , ViewGroup parent){
-
if(convertView == null){
-
convertView = mInflater.inflate(R.layout.list_view, null);
-
}
-
(TextView)convertView.findViewById(R.id.text).setText(DATA[position]);
-
(ImageView)convertView.findViewById(R.id.img).setImageBitmap(icon);
-
return convertView;
-
}
③、使用ViewHolder模式,效率再提高50%
-
static class ViewHolder{
-
private TextView tv;
-
private ImageView iv;
-
}
-
-
public void getView(int position , View convertView , ViewGroup parent){
-
ViewHolder holder;
-
if(convertView == null){
-
convertView = mInflater.inflate(R.layout.list_view, null);
-
holder = new ViewHolder();
-
holder.tv = (TextView)convertView.findViewById(R.id.text);
-
holder.iv = (ImageView)convertView.findViewById(R.id.img);
-
convertView.setTag(holder);
-
}else{
-
holder = (ViewHolder) convertView.getTag();
-
}
-
holder.tv.setText(DATA[position]);
-
holder.iv.setImageBitmap(icon);
-
return convertView;
-
}
更新的效率比较:
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/8831248
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)