`

ListView快速滑动时自定义头像消失与重叠

 
阅读更多

 解决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);
			}
		}

 

0
0
分享到:
评论

相关推荐

    listview快速滑动,修改默认的滑动条

    本话题将重点讨论如何在ListView快速滑动时修改默认的滑动条,以提供更好的用户体验。 首先,我们来看`ListView`的基本用法。在XML布局文件中,我们可以直接添加`ListView`并为其设置ID: ```xml &lt;ListView ...

    安卓Android源码——listview快速滑动,修改默认的滑动条.rar

    然而,当数据量大时,ListView在快速滑动时可能会出现性能问题,同时,其默认的滚动条可能不符合设计需求。本资料包“安卓Android源码——listview快速滑动,修改默认的滑动条.rar”提供了解决这些问题的解决方案。 ...

    android listview快速滑动,修改默认的滑动条Demo.zip

    当用户进行快速滑动时,为了提供良好的用户体验,通常需要对ListView的滚动条进行优化。本Demo旨在演示如何在ListView快速滑动时修改默认的滚动条,提高应用的交互性。以下是关于这个主题的详细知识点: 1. **...

    C# ListView中添加多种自定义控件源码

    本主题将深入探讨如何在C#的ListView中添加和使用各种自定义控件,如CheckBox和ComboBox,以增强用户体验和功能。 一、ListView控件基础 ListView控件允许我们展示数据列表,并提供了多种视图模式,如小图标、大...

    使用Style自定义ListView快速滑动图标

    本节将深入探讨如何使用Style自定义ListView的快速滑动图标。 首先,快速滑动块是Android SDK提供的一种功能,它会在用户滑动列表时显示一个可抓取的手柄,以快速跳转到列表的特定位置。这个手柄通常包含当前滚动...

    Android高级应用源码-listview快速滑动,修改默认的滑动条.zip

    本资源"Android高级应用源码-listview快速滑动,修改默认的滑动条.zip"主要关注两个关键点:ListView的快速滑动优化以及自定义滚动条的实现。这两部分是Android应用开发中的重要技能,对于提升用户体验和性能优化...

    两个ListView同步滑动

    10. **测试与调试**:在开发过程中,应充分进行各种滑动操作的测试,包括快速滑动、慢速滑动、点击滚动条等,确保同步效果无误。使用Android Studio的布局检查器和Logcat可以帮助定位和解决问题。 以上就是实现两个...

    Android应用源码之listview快速滑动,修改默认的滑动条.zip

    本资源"Android应用源码之listview快速滑动,修改默认的滑动条.zip"主要关注ListView的优化和自定义滚动条。以下是对相关知识点的详细阐述: 1. **ListView优化** - **ViewHolder模式**:为提高ListView滚动时的...

    Android应用源码之listview快速滑动,修改默认的滑动条_Android.zip

    但当用户快速滑动ListView时,这种机制可能会带来卡顿现象,因此需要进行性能优化。 一、ListView性能优化 1. **自定义Adapter**: 适配器应重写`getViewTypeCount()`和`getItemViewType(int position)`方法,根据...

    listview快速滑动,修改默认的滑动条android源码

    当用户进行快速滑动时,为了提供良好的用户体验,通常需要自定义滚动条(ScrollIndicator)以适应应用的视觉风格。本文将深入探讨如何在ListView中修改默认的滑动条,并通过分析Android源码来理解其工作原理。 首先...

    安卓listview相关相关-listview快速滑动修改默认的滑动条.rar

    6. **ListView与Adapter的交互**: - `getView(int position, View convertView, ViewGroup parent)`是Adapter的核心方法,它负责为ListView的每个位置创建或复用一个View。 - 在这个方法中,根据position获取对应...

    自定义控件ListView上下滑动效果(开源)

    本知识点主要聚焦于如何创建一个自定义的ListView,实现上下滑动时的特殊效果。开源项目“ZrcListView”提供了一个很好的示例。 1. **自定义ListView**: 自定义ListView主要是通过继承Android提供的AbsListView或者...

    安卓Android源码——listview快速滑动,修改默认的滑动条.zip

    本资料“安卓Android源码——listview快速滑动,修改默认的滑动条.zip”正是针对这个需求,提供了优化ListView快速滑动以及自定义滚动条的解决方案。 首先,我们要理解ListView的工作原理。ListView通过复用视图...

    自定义ListView左右滑动事件

    4. **自定义回调接口**:`SwipeListView`提供了相应的回调接口,使得开发者能够监听滑动事件的发生,并在事件触发时执行相应的业务逻辑。 5. **视图复用优化**:作为对ListView的扩展,`SwipeListView`同样采用了...

    安卓Andriod源码——listview快速滑动,修改默认的滑动条.zip

    本资料包“安卓Andriod源码——listview快速滑动,修改默认的滑动条.zip”主要探讨了如何优化ListView的滑动性能以及自定义滚动条的技巧。 首先,要优化ListView的快速滑动,我们需要了解ListView的工作原理。...

    android 快速滑动listview,快速滑动右边的一排字母,快速查找对应的信息,滑动同时还有方块显示滑动到哪个字母

    1. **ListView与Adapter**:ListView是Android中的一个视图组件,它允许用户滚动显示长列表数据。要实现快速滑动功能,你需要自定义一个Adapter,将数据源(比如ArrayList)与ListView绑定。Adapter负责将数据转化为...

    自定义listView添加滑动删除功能

    自定义ListView不仅可以满足基本的显示需求,还能实现各种交互效果,如滑动删除功能。本篇将详细讲解如何为ListView添加滑动删除的功能。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来填充数据,...

    listview快速滑动,修改默认的滑动条.zip

    标题“listview快速滑动,修改默认的滑动条.zip”暗示了这个压缩包包含了一个关于优化ListView滚动性能以及自定义滚动条的示例。描述中的“源码参考,欢迎下载”提示我们,可以通过查看源代码来学习和理解相关技术。...

    listview的滑动特效

    在描述中提到的"listview的滑动特效"是指为ListView添加的动态视觉效果,当用户在ListView上滑动时,这些特效能提升用户体验,使应用看起来更加酷炫。下面将详细介绍如何实现ListView的滑动特效及其相关知识点。 1....

Global site tag (gtag.js) - Google Analytics