ListView 是一个很常用的控件,一般App中都会使用ListView来实现各种列表效果。
但是,ListView滑动时,需要不断加载其要显示的Item,如果不对其进行优化,一味的去实例化新的item,遇到数据量大的时候就会发生OOM,特别是加载大量BitMap。
ListView 数据是由 Adapter提供。 其实,Adapter中已经提供了的解决方法。
下面通过一张图来说明:
可以看出,其实ListView中每一个滑出页面(由可见变成不可见)的Item,都被收集起来了。
话不多说,下面提供一个通过ViewHolder内部类来实现ListView优化的例子
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.list_insurance_premium_product_item, null);
viewHolder.name = (TextView) convertView.findViewById(R.id.txt_ins_pre_product_name);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (list != null && !list.isEmpty()) {
viewHolder.name.setText(list.get(position).get("productName").toString());
}
return convertView;
}
private class ViewHolder {
TextView name;
}