码迷,mamicode.com
首页 > 其他好文 > 详细

ListView 的优化

时间:2015-08-06 01:47:22      阅读:94      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!