zoukankan      html  css  js  c++  java
  • [Rosa]Android ListView 适配器原理及优化(转)

    ListView的Adapter的作用如下图所示:

     

      Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?

      先看看下面的代码:

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

      我们再来看看下面的代码:

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

      上面的代码好了很多,系统将会减少创建很多View。性能得到了很大的提升。

      下面是更优化的代码:

      public View getView(int position, View convertView, ViewGroup parent) {   ViewHolder holder;   if (convertView == null) {   convertView = mInflater.inflate(R.layout.list_item_icon_text, null);   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;   }      static class ViewHolder {   TextView text;   ImageView icon;   }

      三种方法的对比图:哪个最提升性能一眼就看出来了

    原文地址:http://android.tgbus.com/Android/tutorial/201109/369818.shtml

     

  • 相关阅读:
    从零开始学SQLSERVER-游标CURSOR(基础)
    从零开始学SQLSERVER-创建表
    从零开始学HTML-button
    从零开始学前端HTML-input标签
    专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)
    接口测试框架实战 | 流程封装与基于加密接口的测试用例设计
    软件测试之30分钟轻松搞定正则表达式基础
    Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
    react16与react15之间的区别
    react-父子组件之间的交互传值
  • 原文地址:https://www.cnblogs.com/teamate/p/3443116.html
Copyright © 2011-2022 走看看