• 关于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

  • 相关阅读:
    mysql数据库 --数据类型、约束条件
    并发编程 --线程
    并发编程 --进程
    MySQL数据库 --基础
    网络编程之 TCP-UDP的详细介绍
    网络编程之 OSI七层协议
    python 元类、单例模式
    python 面向对象_多态、内置方法、反射
    Python 面向对象_继承、组合
    简单工厂设计模式
  • 原文地址:https://www.cnblogs.com/ywtk/p/4135031.html
Copyright © 2020-2023  润新知