1.0 listview的adapter中getview的三种写法

Posted hymKing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.0 listview的adapter中getview的三种写法相关的知识,希望对你有一定的参考价值。

说明:以下三个例子代码摘自google 2010 I/O大会

getview的加载方法一般有以下三种种方式:

最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据

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;

 

正确的加载方式是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据

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

 if (convertView == null)

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

 

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

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

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

 return convertView;

 

 

最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

static class ViewHolder

TextView text;

ImageView icon;

 

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

 ViewHolder holder;

 

 if (convertView == null)

 convertView = mInflater.inflate(R.layout.list_item_icon_text,

 parent, false);

 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;

 

三种方式加载效率对比如下图所示:

 


后面1.1,1.2详细分析第三种写法,如何实现了优化。


以上是关于1.0 listview的adapter中getview的三种写法的主要内容,如果未能解决你的问题,请参考以下文章

Listview和Adapter作业

自定义Adapter显示listView

ListView simple adapter

ListView和Adapter信息显示

ListView作业

ANDROID_MARS学习笔记_S04_008_用Listview自定义adapter显示返回的微博数据