标签:
随着ListView的不断深入使用,对于其的优化是必不可免的一个过程,现把其常见的优化步骤分享下,一些粗浅见识。。。
优化分四步走:
第一,复用convertView对象,如果之前有条目对象,就复用,否则就去创建
第二,为了减少findViewById次数,将findViewById已经找到的控件,做一个存储,存储到ViewHolder中,viewHolder存储到复用的convertView中
第三,将ViewHolder定义成静态,字节码加载一次
第四,通过分页算法,进一步优化用户体验(每一次加载20条数据,下一次加载的数据要添加到上一次数据后面)
详细步骤截图如下:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
//1,创建一个要去展示的view对象,布局xml--->view
holder = new ViewHolder();
convertView = View.inflate(getApplicationContext(), R.layout.list_item_black_number, null);
//2,获取一个条目中的控件
holder.tv_phone = (TextView) convertView.findViewById(R.id.tv_phone);
holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode);
holder.iv_delete = (ImageView) convertView.findViewById(R.id.iv_delete);
//给convertView设置一个tag,设置的tag就是要去存储的holder对象
convertView.setTag(holder);
}else{
//将存储在convertView中的holder对象获取出来,给复用的条目去做控件的赋值操作
holder = (ViewHolder) convertView.getTag();
}
//3,给控件赋值
final BlackNumberInfo blackNumberInfo = mBlackNumberList.get(position);
holder.tv_phone.setText(blackNumberInfo.phone);
holder.iv_delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//1,数据库中删除一条数据
mDao.delete(blackNumberInfo.phone);
//2,在集合中,删除一条数据
mBlackNumberList.remove(blackNumberInfo);
//3,告知数据适配器刷新
mAdapter.notifyDataSetChanged();
}
});
return convertView;
}
}
/**
* 临时存储的三个对象
*/
static class ViewHolder{
TextView tv_phone;
TextView tv_mode;
ImageView iv_delete;
}
标签:
原文地址:http://www.cnblogs.com/adv-qbj/p/4706241.html