1. ListView需要设置adapter,它的item是通过adapter的方法getView(int position, View convertView, ViewGroup parent)获得的。
2. ListView中只有第一屏的item需要新建,它的引用会被存在RecycleBin对象内,在拖动时后面的item实际上是重从了之前创建的item。
3. 根据上述,ListView在需要显示item时,最开始第一屏时,getView(int position, View convertView, ViewGroup parent )的第二个参数为null,显示第二屏或者回滚显示第一屏时,getView(int position, View convertView, ViewGroup parent )第二个参数是一个原来缓存的item,我们只需要在getView中把它内部数据更新即可。
4. 如果item结构比较复杂,在更新一个已有的item内部数据的时候,查找item内部每一个元素也需要占用不少资源,所以,可以把这些内部元素的引用缓存起来,直接对其赋值,最有效的方法是把这些引用存到对应的item中,比较好的方法是使用setTag()方法。
据上四条,可得出:
1. 在adapter的getView(int position, View convertView, ViewGroup parent)方法中,每次都new一个新的View返回,是性能最差的,浪费了ListView巧妙设计的一片苦心。
2. 如果item内部元素简单,getView中如果传进来的view不为空,直接为其赋值即可。
3. 如果item内部元素复杂,可以使用Google IO 大会中讨论的方法优化(如下):
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.icon1 = (ImageView) convertView.findViewById(R.id.icon1);
holder.text1 = (TextView) convertView.findViewById(R.id.text1);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
holder.icon1.setImageResource(R.drawable.icon);
holder.text1.setText(mData[position]);
return holder;
}
static class ViewHolder {
TextView text1;
ImageView icon1;
}
分享到:
相关推荐
ViewHolder设计模式是ListView优化的关键。它的主要思想是减少findViewById()的调用次数,提高视图查找的效率。在getView()方法中,我们通常会通过convertView参数获取到一个已经创建过的视图,如果这个视图可以复用...
1. **ViewHolder模式**:这是ListView优化的核心。通过复用convertView,避免频繁创建新的View对象。ViewHolder模式确保了每个item的视图状态在滚动时能得到快速恢复,降低了内存分配和对象创建的开销。在`getView()...
1. **ListView优化策略** - **ViewHolder模式**:为了解决ListView滚动时频繁创建与销毁视图导致的性能问题,我们可以使用ViewHolder设计模式。这个模式缓存了视图的引用,减少了findViewById()的调用次数,提高了...
综上所述,CocosCreator的ListView优化涉及到多方面的策略,包括复用机制、数据绑定、异步加载、绘制优化等。通过使用`GListView.js`这样的扩展库,开发者可以更好地控制ListView的行为,提高应用在处理大量数据时的...
总结,ListView优化主要包括视图复用、适配器优化、ViewHolder模式、数据分页加载等,而`SwipeRefreshLayout`提供了便捷的下拉刷新功能。通过这些策略,我们可以使ListView在处理大数据量时仍保持流畅,提供更好的...
本教程将通过"最经典的listView优化demo",为初学者提供一份详尽的Android ListView适配器优化实践。 首先,我们要理解ListView的工作原理。ListView采用了一种叫做“视图复用”的机制,即只有当前屏幕可见的几项...
本示例“listview优化图片缓存例子”将详细介绍如何利用缓存策略来提高ListView加载图片的效率。 一、图片缓存的重要性 在ListView中,由于屏幕空间有限,只有部分列表项可见。当用户滚动时,一些不再可视的列表项...
ListView优化** ListView的优化主要涉及以下几个方面: 1.1 **convertView复用机制**:ListView的Adapter中,`getView()`方法会创建并填充新的视图,但为了提高性能,应充分利用convertView,通过`convertView....
1. **使用ViewHolder模式**:这是ListView优化的核心,通过复用convertView来减少 findViewById 的次数,提高性能。ViewHolder类存储了ListView项布局中的各个视图引用,当需要创建新视图时,直接从ViewHolder中获取...
文件"ListView"可能是示例代码,包含了一个简单的ListView应用实例,包括JSON解析、Adapter实现、ListView优化、图片加载和子控件点击事件处理等功能。通过查看和学习这个代码,你可以更好地理解和掌握上述知识点。...
五、ListView优化策略 1. 使用 ViewHolder 设计模式:缓存convertView中的子视图,避免每次绑定数据时的查找操作。 2. 图片缓存:利用内存缓存和磁盘缓存,如使用Universal Image Loader、Picasso或Glide库,它们...
以下是对ListView优化的一些关键点和策略的详细说明: 1. **复用convertView**:ListView的工作机制是基于视图缓存的,即只有当前屏幕可见的item需要被创建。convertView参数在getView方法中用于传递已经创建并可以...
本篇文章将深入探讨ListView与BaseAdapter的工作原理,并详细介绍如何进行性能优化。 首先,我们来理解一下Adapter在Android中的作用。Adapter是连接数据源和UI组件的桥梁,它负责将数据转化为可显示的视图。在...
ViewHolder模式是ListView优化的核心技巧,它可以避免在滚动时频繁地创建和查找视图对象。通过创建一个ViewHolder类来持有每个列表项视图中的子视图引用,并在getView()方法中重用已存在的ViewHolder,可以显著减少...
以下是对"ListView优化示例源码"的详细解读。 1. **复用机制**:ListView的核心优化策略是视图复用,即`convertView`。在`getView()`方法中,如果传入的convertView不为空,那么我们就可以复用这个已经创建过的视图...
ViewHolder模式是ListView优化的核心策略之一。它通过缓存convertView中的子View,减少findViewById()的调用次数,从而提升性能。创建一个ViewHolder类,持有ListView每一项所需的视图引用,然后在getView()方法中...
ViewHolder模式是ListView优化的关键。它通过缓存convertView的子视图,减少findViewById的调用次数,提高滚动时的性能。在getView()方法中,先检查convertView是否为空,如果不空,则直接通过ViewHolder获取视图,...
以下是一些关于ListView优化的关键知识点: 1. **分页加载**:在处理大数据集时,不应一次性加载所有数据,而是采用分页加载策略。当用户滚动到列表底部时,通过异步请求加载更多数据。这样可以减少内存消耗,提高...
综上所述,ListView优化是一个多方面的工作,包括缓存策略、数据加载方式、图片处理等多个环节。通过对这些环节的优化,我们可以显著提高ListView的性能,提供更流畅的用户体验。在实际开发中,结合“无缓存”、“一...