说到优化主要是在getView方法内进行优化
传统模式:
View view = View.inflate(ExampleActivity.this, R.layout.item_example, null);
TextView tvNumber = (TextView) view.findViewById(R.id.tv_number);
tvNumber.setText(ExampleInfos.get(position).getNumber());
这种方式在item多了的情况下容易崩溃,不建议采用。
谷歌在2009IO大会中也说了不要使用这种方式
第二种稍微好点的方式:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = View.inflate(ExampleActivity.this,R.layout.item_example, null);
}
.....
return convertView;
}
第三种更优的方式:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(ExampleActivity.this,R.layout.list_item_icon_text, null);
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;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
三种方式的比较:
如果item比较多,还可以使用分批加载数据或者分页加载的方式,以后再补