public View getView(int pos, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder.text = (TextView) convertView.findViewById( R.id.text));
holder.icon = (ImageView) convertView.findViewButId( R.id.icon));
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[pos]);
holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
// holder = new ViewHolder();
}
// ViewHolder 模式, 效率提高 50%
static class ViewHolder {
TextView text;
ImageView icon;
}
// 内存分配 不要创建 Java 对象 在性能敏感的代码里, 尽量避免创建 Java 对象
测量: 布局: onMeasure() onLayout() 绘图:
事件处理: dispatchTouchEvent(), onTouchEvent()
Adapter: getView(), bindView()
GC, 垃圾回收
整个程序会暂停 慢 (大约几百个毫秒)
分享到:
相关推荐
"ListView使用ViewHolder模式提高效率"这一主题就是解决这个问题的关键知识点。 ViewHolder模式是Android开发中为了提升ListView性能而设计的一种优化策略。它通过减少findViewById的调用来改善视图的绘制速度。在...
使用 ViewHolder 模式提高效率 #### 原理 `ViewHolder` 模式是提高 ListView 效率的关键技术。传统的 `getView()` 方法中每次都会通过 `findViewById()` 实例化控件,这在数据量较大时会导致性能瓶颈。而 `...
- **复用View**:对于列表、网格等重复显示的数据,可以使用ViewHolder模式提高效率。 - **使用BitmapShader**:处理大图时,可以使用BitmapShader进行局部渲染,降低内存消耗。 本教程的高清视频将详细讲解以上...
对于大型列表,考虑使用ViewHolder模式提高效率,避免内存泄漏,同时确保在滚动过程中只更新必要的视图。此外,对于兼容性问题,确保在较低版本的Android系统中也能正常工作,可能需要使用Support Library来实现...
ViewHolder模式是为了提高列表滑动时的性能而设计的,避免频繁地查找并创建新的View对象。在`getView()`方法中,首先通过convertView参数检查是否已经创建过该位置的View,如果存在,则直接复用;否则,创建新的View...
ViewHolder模式的核心思想是减少findViewById的调用,提高列表滚动时的性能。通常情况下,我们会在Adapter的getView方法中创建一个新的ViewHolder对象,然后绑定数据。然而,这样的写法可能会导致大量的对象创建,...
这个“万能的ViewHolder适配器”概念,就是对ViewHolder模式的一种扩展和优化,适用于各种类型的列表数据适配。 ViewHolder设计模式的核心思想是减少findViewById()方法的调用,提升ListView滚动时的性能。当...
ViewHolder模式的核心思想是减少 findViewById() 方法的调用,因为这个方法在布局复用时会产生较大的性能开销。通过创建一个ViewHolder类,持有UI组件的引用,可以在需要更新视图时快速访问,避免频繁查找视图对象,...
ViewHolder模式是Android UI开发中的一个最佳实践,它通过缓存视图对象的引用,避免了在滚动列表时频繁地查找视图,从而显著提高了列表滚动的流畅性。在创建ViewHolder时,我们通常会创建一个内部静态类,它持有...
4. **缓存数据复用**:ViewHolder不仅保存了视图引用,还可以保存一些与视图关联的数据,比如文字、图片等,这样在显示新数据时可以直接复用这些缓存的数据,进一步提高效率。 然而,在Android 5.0之后,谷歌推出了...
在`CommAdapter_commonViewHolder`这个示例中,我们可以推测作者提供了一个通用的Adapter实现,可能包含了对ViewHolder模式的支持,适用于多种数据结构的列表展示。这样的通用Adapter可以减少代码重复,提高代码复用...
在Android开发中,高效地处理ListView、RecyclerView等可滚动...通过抽象`BaseAdapter`为`CommonAdapter`,我们可以进一步优化代码结构,提高开发效率。在实际项目中,善用这些技术可以显著提升应用的性能和用户体验。
ViewHolder保存了视图项中各个子视图的引用,避免了每次`getView()`调用时都要查找对应的视图,显著提高了效率。实现ViewHolder通常包括以下步骤: 1. 定义一个ViewHolder类,其中包含ListView项中所有子视图的成员...
1. **ViewHolder模式**:为了减少findViewById()的调用次数,我们应使用ViewHolder模式。ViewHolder是一个内部类,持有每个列表项视图的所有视图引用。这样,在getView()方法中,我们只需要一次findViewById(),然后...
今天我们将深度探讨一个名为"android-viewholder-listviews"的开源项目,它旨在简化并清晰化使用ViewHolder模式与ListView的流程。同时,我们也会提及"activeobjects-0.9.15.zip"这个压缩包,尽管其具体用途不在此...
- **ViewHolder模式**:为了进一步提高性能,可以采用ViewHolder模式来存储视图元素的引用。这样,在`getView()`方法中只需初始化一次ViewHolder对象,并将其绑定到`convertView`上,后续操作可以直接访问ViewHolder...
这样,当数据绑定到视图时,可以直接使用已经缓存的视图对象,减少了大量的findViewById()操作,从而提高效率。 下面我们将深入探讨如何在自定义Adapter中使用ViewHolder来优化性能。 首先,定义一个ViewHolder类...
这种`ViewHolder`结合`CommonAdapter`的方法,让开发者可以更专注于数据和视图的绑定,而不是重复适配器的实现细节,大大提高了开发效率和代码质量。在实际项目中,可以根据需求进一步扩展,如支持头尾视图、动画...
ViewHolder存储了视图的引用,当需要绑定数据时,直接使用ViewHolder中的视图而不是每次都从布局中查找,提高了效率。 6. **适配器模式的优势**: - **灵活性**:适配器模式允许我们使用现有类,无需修改它们就能...
2. **ViewHolder模式**: - ViewHolder通常是一个内部类,持有列表项视图中的各个组件引用。在`getView()`方法中,先检查convertView是否为空,如果不为空,则直接使用,否则新建视图并设置Tag为ViewHolder对象。 ...