ListView开发总结笔记

来源:互联网 发布:淘宝店铺认证后怎么办 编辑:程序博客网 时间:2024/03/29 22:04


PS:

这个东西是早前时段写的,参考价值不大,扔了又觉得可惜.所以还是在次存档.



ListView优化的三种情况和方式

第一种情况:常采用ViewHolder

在getView的时候都会返回一个convertView
为了避免每次
convertView = LayoutInflater.from(this.mContext).inflate(R.layout.listview_news_item, null, false);
然后再挨个findViewById()来为控件赋值,这样很浪费时间,效率不高.
于是可以用ViewHolder来解决问题.
当convertView为空的时候(即第一次的时候),我们执行:
convertView = LayoutInflater.from(this.mContext).inflate(R.layout.listview_news_item, null, false);
convertView.setTag(holder);
当convertView不为空的时候
holder = (ViewHolder) convertView.getTag();

        @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder holder = null;
  if (convertView == null) {
   holder = new ViewHolder();   
   convertView = LayoutInflater.from(this.mContext).inflate(
     R.layout.listview_news_item, null, false);  
   holder.dateTextView = (TextView) convertView
     .findViewById(R.id.news_item_date);
   holder.contentTextView = (TextView) convertView
     .findViewById(R.id.news_item_content);
   holder.arrowImageView=(ImageView) convertView
     .findViewById(R.id.news_item_arrow); 
   convertView.setTag(holder);
  
  } else {
   holder = (ViewHolder) convertView.getTag();
  }
  
  if (this.mList != null) {
   NewsListItemObject item = this.mList.get(position);
   if (holder.dateTextView != null) {
    holder.dateTextView.setText(item.ann_str_dm);
   }
   if (holder.contentTextView != null) {
    holder.contentTextView.setText(item.con_tit);
    
   }
   if (item.getClk_url().trim().length()<1) {
    holder.arrowImageView.setVisibility(View.INVISIBLE);
   }else {
    holder.arrowImageView.setVisibility(View.VISIBLE);
   }

  }

  return convertView;

 }


第二种情况:
加载本地图片可以采用取缩率图的方式,来避免加载大图造成OOM

第三种情况:
加载网络图片避免OOM

我们可以自己写一个异步加载的框架来实现.主要考虑的是网络请求,图片的在内存中的缓存以及在SDCard中保存.
同时我们可以采用一些第三方已经封装好的工具来实现.
比如ImageLoader以及universal-image-loader


0 0
原创粉丝点击