解决ListView上下快速滑动过程中头像消失问题,
主要原因为:
使用了定义软引用 Map<String, SoftReference<Bitmap>> 在快速滑动时,系统将内存中的头像回收导致
解决办法:
使用强引用定义 LruCache<String, Bitmap> iconCache = new LruCache<String, Bitmap>((int) (Runtime.getRuntime().maxMemory() / 8)); 用意在任何情况时都不进行回收。
关键代码如下:
1.开启线程用于 LruCache储存查询到的头像资源,完毕后通知适配器更新。
//开启线程用于 LruCache储存查询到的头像资源 public void swapData() { this.mlist = MyApplication.getMyApplication().getContacts(); new Thread(new Runnable() { @Override public void run() { for (PhoneNumberModel model : mlist) { if (HeadImageUtils.isIcon(mContext, model.getContactId() + "")) { if (iconCache.get(model.getContactId() + "") == null) { Bitmap bitmap = HeadImageUtils.queryContactsBitmap( mContext, model.getContactId()); // iconCache.put(model.getContactId() + "", // new SoftReference<Bitmap>(bitmap)); iconCache.put(model.getContactId() + "", bitmap); // Bundle bundle = new Bundle(); Message mesg = new Message(); mesg.what = 0; } } } handler.sendEmptyMessage(0); } }).start();
2.主线程UI接收消息msg.what == 0 通知并刷新头像
//接收adapter通知刷新 public Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { if (msg.what == UPDATE_VIEW) { loaderCollectionContacts(); }else if(msg.what == 0){ contactsListAdapter.notifyDataSetChanged(); } }; };
3.在getView()方法中根据联系人的ID作为key从内存中获取相应的头像图片,再将其设置在相应的控件上。
在这要注意的一个问题是在设置头像图片的时候要在else中判断在if中设置的标识tag是否跟现在的联系人ID相同,在不相同的情况下对控件中设置过的数据进行清除操作:。
ps:联系人ID = TAG
//获取缓冲中的头像并设置 if (iconCache.get(model.getContactId() + "") != null) { holder.head.setImageBitmap(iconCache.get(model.getContactId()+"")); holder.head.setTag(model.getContactId()); } else { if (holder.head.getTag() != null && !(model.getContactId() + "").equals(holder.head.getTag() .toString())) { holder.head.setImageBitmap(null); } }
相关推荐
本话题将重点讨论如何在ListView快速滑动时修改默认的滑动条,以提供更好的用户体验。 首先,我们来看`ListView`的基本用法。在XML布局文件中,我们可以直接添加`ListView`并为其设置ID: ```xml <ListView ...
然而,当数据量大时,ListView在快速滑动时可能会出现性能问题,同时,其默认的滚动条可能不符合设计需求。本资料包“安卓Android源码——listview快速滑动,修改默认的滑动条.rar”提供了解决这些问题的解决方案。 ...
当用户进行快速滑动时,为了提供良好的用户体验,通常需要对ListView的滚动条进行优化。本Demo旨在演示如何在ListView快速滑动时修改默认的滚动条,提高应用的交互性。以下是关于这个主题的详细知识点: 1. **...
本主题将深入探讨如何在C#的ListView中添加和使用各种自定义控件,如CheckBox和ComboBox,以增强用户体验和功能。 一、ListView控件基础 ListView控件允许我们展示数据列表,并提供了多种视图模式,如小图标、大...
本节将深入探讨如何使用Style自定义ListView的快速滑动图标。 首先,快速滑动块是Android SDK提供的一种功能,它会在用户滑动列表时显示一个可抓取的手柄,以快速跳转到列表的特定位置。这个手柄通常包含当前滚动...
本资源"Android高级应用源码-listview快速滑动,修改默认的滑动条.zip"主要关注两个关键点:ListView的快速滑动优化以及自定义滚动条的实现。这两部分是Android应用开发中的重要技能,对于提升用户体验和性能优化...
10. **测试与调试**:在开发过程中,应充分进行各种滑动操作的测试,包括快速滑动、慢速滑动、点击滚动条等,确保同步效果无误。使用Android Studio的布局检查器和Logcat可以帮助定位和解决问题。 以上就是实现两个...
本资源"Android应用源码之listview快速滑动,修改默认的滑动条.zip"主要关注ListView的优化和自定义滚动条。以下是对相关知识点的详细阐述: 1. **ListView优化** - **ViewHolder模式**:为提高ListView滚动时的...
但当用户快速滑动ListView时,这种机制可能会带来卡顿现象,因此需要进行性能优化。 一、ListView性能优化 1. **自定义Adapter**: 适配器应重写`getViewTypeCount()`和`getItemViewType(int position)`方法,根据...
当用户进行快速滑动时,为了提供良好的用户体验,通常需要自定义滚动条(ScrollIndicator)以适应应用的视觉风格。本文将深入探讨如何在ListView中修改默认的滑动条,并通过分析Android源码来理解其工作原理。 首先...
6. **ListView与Adapter的交互**: - `getView(int position, View convertView, ViewGroup parent)`是Adapter的核心方法,它负责为ListView的每个位置创建或复用一个View。 - 在这个方法中,根据position获取对应...
本知识点主要聚焦于如何创建一个自定义的ListView,实现上下滑动时的特殊效果。开源项目“ZrcListView”提供了一个很好的示例。 1. **自定义ListView**: 自定义ListView主要是通过继承Android提供的AbsListView或者...
本资料“安卓Android源码——listview快速滑动,修改默认的滑动条.zip”正是针对这个需求,提供了优化ListView快速滑动以及自定义滚动条的解决方案。 首先,我们要理解ListView的工作原理。ListView通过复用视图...
4. **自定义回调接口**:`SwipeListView`提供了相应的回调接口,使得开发者能够监听滑动事件的发生,并在事件触发时执行相应的业务逻辑。 5. **视图复用优化**:作为对ListView的扩展,`SwipeListView`同样采用了...
本资料包“安卓Andriod源码——listview快速滑动,修改默认的滑动条.zip”主要探讨了如何优化ListView的滑动性能以及自定义滚动条的技巧。 首先,要优化ListView的快速滑动,我们需要了解ListView的工作原理。...
1. **ListView与Adapter**:ListView是Android中的一个视图组件,它允许用户滚动显示长列表数据。要实现快速滑动功能,你需要自定义一个Adapter,将数据源(比如ArrayList)与ListView绑定。Adapter负责将数据转化为...
自定义ListView不仅可以满足基本的显示需求,还能实现各种交互效果,如滑动删除功能。本篇将详细讲解如何为ListView添加滑动删除的功能。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来填充数据,...
标题“listview快速滑动,修改默认的滑动条.zip”暗示了这个压缩包包含了一个关于优化ListView滚动性能以及自定义滚动条的示例。描述中的“源码参考,欢迎下载”提示我们,可以通过查看源代码来学习和理解相关技术。...
在描述中提到的"listview的滑动特效"是指为ListView添加的动态视觉效果,当用户在ListView上滑动时,这些特效能提升用户体验,使应用看起来更加酷炫。下面将详细介绍如何实现ListView的滑动特效及其相关知识点。 1....