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

  • 相关阅读:
    [buuctf] pwn-第五空间2019pwn
    [buuctf] pwn-[OGeek2019]babyrop
    [buuctf] pwn-ciscn_2019_c_1
    [buuctf] pwn-jarvisoj_level0
    wamp集成环境配置php7.x连接mssql
    EXCEL小技巧之单击单元格实现自增
    Asuhe博客转移
    数据链路层中的最小帧长是如何计算出来的?
    CSMA/CD协议中如何确定数据重传时机?
    Cache设计
  • 原文地址:https://www.cnblogs.com/ywtk/p/4135031.html
Copyright © 2011-2022 走看看