zoukankan      html  css  js  c++  java
  • 关于ListView性能优化

    当listview显示的数据过多,会严重影响性能。这里主要使用的优化方法,就是优化数据适配器(Adapter)的getView方法。尽量减少显示一次数据,重新加载一次布局。

    getview的加载方法一般有以下三种种方式:

    (1)最慢的加载方式是每一次都重新定义一个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;
    
    }

    (2)正确的加载方式是当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;
        }

    (3)最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可,ViewHolder 模式, 效率提高 50%

        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.listview_item,
                        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("数据");
            holder.icon.setImageBitmap(bitmap);
            return convertView;
        }

     参考:http://blog.csdn.net/xiaodongvtion/article/details/7918741

  • 相关阅读:
    连接Excel文件时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
    C# 中LinkLabel的简单使用
    体验安装金蝶K/3 Wise 13.0(图像)
    VS2008让自己掌控的定义编译项目后,自己主动添加到工具箱
    哥哥牟:由于道路的明星莫属,它救了我的女儿!
    【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
    Ubuntu14.04 工作区设置
    Android定调的发展
    Spark1.0.0 学习路径
    oracle 11g 基于磁盘的备份rman duplicate
  • 原文地址:https://www.cnblogs.com/ywtk/p/4135031.html
Copyright © 2011-2022 走看看