首页 > 其他 > 详细

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

时间:2014-12-28 02:11:58      阅读:158      评论:0      收藏:0      [点我收藏+]

?解决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快速滑动时自定义头像消失与重叠

原文:http://kt-g.iteye.com/blog/2170496

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!