大家都知道在listview里巧用convertview和viewholder能提高效率,研究了好半天终于搞懂了。写点心得
无良的窃取一下他人代码,方便研究
public View getView(int pos, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById( R.id.text));
holder.icon = (ImageView)
convertView.findViewButId( R.id.icon));
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[pos]);
holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
// ViewHolder 模式, 效率提高 50%
static class ViewHolder {
TextView text;
ImageView icon;
}
convertView很好理解,是个view 的缓存,优化:如果存在就不需要重新创建了,没有的话需要通过inflate方法获取。 这样就把大量需要创建的无必要劳动给去掉了。
viewholder是个自定义静态类,通过gettag()/settag()和convertview关联起来,作用是减少findViewById的次数。因为findViewById会消耗大量时间。
本文详细介绍了在ListView中使用ViewHolder模式优化代码的方法,通过缓存View和减少findViewById操作来提升性能,实现效率提高50%的效果。
371

被折叠的 条评论
为什么被折叠?



