ListView等的Adapter优化
众所周知,Adapter是ListView与界面和数据之间的桥梁,通过Adapter中的gerView()方面来获得界面要显示的View,但你有没有想过,当ListView中数据量很大时,如何对Adapter进行优化呢?以下有三种实现方式,具体来看一下。
1.
public View getView(int position, View convertView, ViewGroup parent){final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View v = inflater.inflate(R.layout.list_item_icon_text, null);((ImageView) v.findViewById(R.id.icon)).setImageResource(R.drawable.icon);((TextView) v.findViewById(R.id.text)).setText(mData);return v;} 这是最简单的一种方式,没有经过任何的优化,菜鸟级别的人很容易这样做。
2.
public View getView(int position, View convertView, ViewGroup parent){if(convertView == null){convertView = inflater.inflate(R.layout.list_item_icon_text, null);}((ImageView) v.findViewById(R.id.icon)).setImageResource(R.drawable.icon);((TextView) v.findViewById(R.id.text)).setText(mData);return convertView;} 这是一种稍微改进的方式,有形成每个ListView的item时,每个Item的容器对象进行了重得利用。
3.
public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {final LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView = inflater.inflate(R.layout.list_item_icon_text, null);holder = new ViewHolder();holder.icon = (ImageView) convertView.findViewById(R.id.icon);holder.text = (TextView) convertView.findViewById(R.id.text);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.icon.setImageResource(R.drawable.icon);holder.text.setText(mData);return convertView;}static class ViewHolder {ImageView icon;TextView text;} 这是09年Google IO大会上给出的优化建议,经过改进后,在处理大量数据的时候,确实流畅了很多。
文章参照:
http://www.ideasandroid.com/archives/295
http://www.cnblogs.com/halzhang/archive/2010/12/05/1896791.html
页:
[1]