/** * @author UFreedom * @since 2014 2014-10-2 下午9:25:04 * @see www.52yummy.com * <br> * sunfreedom@sina.cn * <br> * Copyright (C) 2014 UFreedom. All Rights Reserved. */ package com.codecomb.views.adapter; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.os.Handler; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.codecomb.events.AppExitEvent; import com.codecomb.infrastructure.asynctask.AvatarDownloader; import com.codecomb.infrastructure.asynctask.AvatarDownloader.DownloadListener; import com.codecomb.infrastructure.cache.BitmapCacheManage; import com.codecomb.infrastructure.cache.MemoryCacheManager; import com.codecomb.module.contacts.Contact; import com.codecomb.ufreedom.R; import com.codecomb.view.widgets.CircularImageView; import de.greenrobot.event.EventBus; public class ContactsAdapter extends BaseAdapter { private static final String TAG = ContactsAdapter.class.getSimpleName(); private Context context; private LayoutInflater layoutInflater; private List<Contact> contacts; private AvatarDownloader<CircularImageView> avatartThead; public ContactsAdapter(Context context, List<Contact> cts) { EventBus.getDefault().register(this); this.context = context; this.contacts = cts; layoutInflater = LayoutInflater.from(context); avatartThead = new AvatarDownloader<CircularImageView>(new Handler()); initListener(); avatartThead.start(); avatartThead.getLooper(); } @Override public int getCount() { // TODO Auto-generated method stub return contacts.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return contacts.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.lv_item_chat_contact, parent, false); viewHolder.vAvatar = (CircularImageView) convertView .findViewById(R.id.vAvatar); viewHolder.vNickname = (TextView) convertView .findViewById(R.id.vNickname); viewHolder.vMotto = (TextView) convertView .findViewById(R.id.vMotto); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Contact contact = (Contact) getItem(position); viewHolder.vNickname.setText(contact.getNickName()); viewHolder.vMotto.setText(contact.getMotto()); viewHolder.vAvatar.setImageResource(R.drawable.ic_avatar_default); Bitmap avatar = BitmapCacheManage.getInstance().getBitmapFromCache( Integer.toString(contact.getUserID())); if (avatar != null) { // Log.e(TAG, "缓存中存在头像,开始设置"); viewHolder.vAvatar.setImageBitmap(avatar); } else { // Log.e(TAG, "缓存中不存在头像,开始下载"); avatartThead.queryAvatar(viewHolder.vAvatar, Integer.toString(contact.getUserID()), contact.getAvatarURL()); } return convertView; } private void initListener() { avatartThead .setDownloadListener(new DownloadListener<CircularImageView>() { @Override public void onAvatarDownloaded(CircularImageView token, Bitmap avatar) { // Log.e(TAG, "头像下载完毕,开始更新头像"); token.setImageBitmap(avatar); } @Override public void cache(String key, Bitmap value) { BitmapCacheManage.getInstance().addBitmapToCache(key, value); // Log.e(TAG, "存储头像到缓存"); } }); } class ViewHolder { private TextView vNickname; private TextView vMotto; private CircularImageView vAvatar; } public void onEvent(AppExitEvent event){ Log.e(TAG, "清理缓存"); BitmapCacheManage.getInstance().cleanCache(); } }