博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListView优化
阅读量:7187 次
发布时间:2019-06-29

本文共 1864 字,大约阅读时间需要 6 分钟。

在getView()方法中,每次都将布局重新加载了一遍,当ListView快速滚动的时候,这就会成为性能的瓶颈。

getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用。

因此我们可以通过他来进行优化:

@Override    public View getView(int position, View convertView, ViewGroup parent) {        Fruit fruit = getItem(position);        View view;        if (convertView == null) {            view = LayoutInflater.from(getContext()).inflate(resourceId, parent,                false);        } else {            view = convertView;        }        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);        TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);        fruitImage.setImageResource(fruit.getImageId());        fruitName.setText(fruit.getName());        return view;    }

不过,目前我们的这份代码还是可以继续优化的,虽然现在已经不会再重复去加载布局,但是每次在getView()方法中还是会调用ViewfindViewById()方法来获取一次控件的实例。我们可以借助一个ViewHolder来对这部分性能进行优化:

@Override    public View getView(int position, View convertView, ViewGroup parent) {        Fruit fruit = getItem(position);        View view;        ViewHolder viewHolder;        if (convertView == null) {            view = LayoutInflater.from(getContext()).inflate(resourceId, parent,            false);            viewHolder = new ViewHolder();            viewHolder.fruitImage = (ImageView) view.findViewById            (R.id.fruit_image);            viewHolder.fruitName = (TextView) view.findViewById (R.id.fruit_name);            view.setTag(viewHolder); // 将ViewHolder存储在View中        } else {            view = convertView;            viewHolder = (ViewHolder) view.getTag(); // 重新获取ViewHolder        }        viewHolder.fruitImage.setImageResource(fruit.getImageId());        viewHolder.fruitName.setText(fruit.getName());        return view;    }    class ViewHolder {        ImageView fruitImage;        TextView fruitName;    }

 

转载于:https://www.cnblogs.com/lvcoding/p/8286768.html

你可能感兴趣的文章
auto,register,static实例
查看>>
log4net 开启内部调试
查看>>
Shell脚本开发过程中遇到的问题处理
查看>>
30421发展
查看>>
一些关于Gulp和NodeJS Stream的理解
查看>>
配置java环境
查看>>
我在csdn有一个新家啦
查看>>
LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
查看>>
【Python学习笔记】-冒泡排序、插入排序、二分法查找
查看>>
linux进程管理之进程创建(三)
查看>>
DS第五章学习小结
查看>>
IT的开始之路——微信小程序(3)
查看>>
Binary Postorder Traversal
查看>>
Backpack III 完全背包
查看>>
Android快捷键
查看>>
对象进阶
查看>>
闹心的CSDN
查看>>
java基础---面向对象
查看>>
51nod - 1022【四边形不等式优化DP】
查看>>
3月3日(6) Climbing Stairs
查看>>