首页 > 其他 > 详细

ListView 的优化

时间:2015-08-06 01:45:55      阅读:226      评论:0      收藏:0      [点我收藏+]

 随着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;
}

 

ListView 的优化

原文:http://www.cnblogs.com/adv-qbj/p/4706241.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!