• 冲刺(八)


    转载至:https://www.cnblogs.com/wugu-ren/p/6106379.html

    ViewHolder通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。
    在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。
    ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) {}
    方法中进行的(要自定义listview都需要重写listadapter:如BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),优化listview的加载速度就要让convertView匹配列表类型,并最大程度上的重新使用convertView。
    getview的加载方法一般有以下三种种方式:
    最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据

    public View getView(int position, View convertView, ViewGroup parent) 
      {
       View item = mInflater.inflate(R.layout.list_item_icon_text, 
      null);
       ((TextView) 
      item.findViewById(R.id.text)).setText(DATA[position]);
       ((ImageView) item.findViewById(R.id.icon)).setImageBitmap(
       (position & 1) == 1 ? mIcon1 : mIcon2);
      return item;
      }

    正确的加载方式是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据

     public View getView(int position, View convertView, ViewGroup parent) 
      {
         if (convertView == null) {
             convertView = mInflater.inflate(R.layout.item, parent, false);
         }
       ((TextView) 
      convertView.findViewById(R.id.text)).setText(DATA[position]);
       ((ImageView) 
      convertView.findViewById(R.id.icon)).setImageBitmap(
      (position & 1) == 1 ? mIcon1 : mIcon2);
      return convertView;
      }

     最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

     static class ViewHolder {
      TextView text;
      ImageView icon;
      }
      public View getView(int position, View convertView, ViewGroup parent) 
      {
       ViewHolder holder;
       if (convertView == null) {
       convertView = mInflater.inflate(R.layout.list_item_icon_text,
      parent, false);
      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;
     }
  • 相关阅读:
    spring mvc---web.xml
    javascript:;与javascript:void(0)使用介绍
    JVM的内存区域划分
    获取配置文件内容
    spring获取webapplicationcontext,applicationcontext几种方法详解
    Spring MVC 中 HandlerInterceptorAdapter的使用(拦截器)
    google开发工具指南
    深克隆
    IO优化
    UML类图
  • 原文地址:https://www.cnblogs.com/tianwenjing123-456/p/12763610.html
Copyright © 2020-2023  润新知