package org.carelife.creader.ui.adapter; import java.util.HashMap; import java.util.List; import org.carelife.creader.dao.RankData; import org.carelife.creader.util.AsynImageLoaderUtil; import android.app.ProgressDialog; import android.content.Context; import android.graphics.Bitmap; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import org.carelife.creader.R; public class CateRankListAdapter extends BaseAdapter { Context context; List<RankData> data; ProgressDialog dialog; private HashMap<String, Bitmap> imageCache = new HashMap<String, Bitmap>(); private HashMap<String, ImageView> imageViews = new HashMap<String, ImageView>(); final Handler handler = new Handler() { public void handleMessage(Message message) { switch (message.what) { case 0: if (message.obj != null) { String url = (String) message.obj; imageViews.get(url).setImageBitmap(imageCache.get(url)); } break; case 1: if (message.obj != null) { String url = (String) message.obj; imageViews.get(url).setImageBitmap(imageCache.get(url)); } break; default: break; } } }; public CateRankListAdapter(Context context, List<RankData> result, Handler viewHandler , ProgressDialog dialog) { this.data = result; this.context = context; this.dialog = dialog; } public int getCount() { return data.size(); } public Object getItem(int position) { return data.get(position); } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { final HolderView holder; if (convertView == null) { convertView = View .inflate(context, R.layout.rankcatelistitem, null); holder = new HolderView(); holder.pic = (ImageView) convertView .findViewById(R.id.rankcate_list_pic); holder.title = (TextView) convertView .findViewById(R.id.rankcate_list_title); holder.status = (TextView) convertView .findViewById(R.id.rankcate_list_status); holder.author = (TextView) convertView .findViewById(R.id.rankcate_list_author); holder.desc = (TextView) convertView .findViewById(R.id.rankcate_list_desc); holder.layout = (RelativeLayout) convertView .findViewById(R.id.rankcatelist_layout); convertView.setTag(holder); } else { holder = (HolderView) convertView.getTag(); } if (null != data.get(position).getpicurl()) { final String pic_url = data.get(position).getpicurl(); imageViews.put(pic_url, holder.pic); holder.pic.setImageResource(R.drawable.book_default); new Thread() { public void run() { if (imageCache.containsKey(pic_url)) { if (imageCache.get(pic_url) != null) { Message message = handler.obtainMessage(1, pic_url); handler.sendMessage(message); return; } } Bitmap bitmap = AsynImageLoaderUtil .loadImageFromNet(pic_url); if (bitmap != null) { imageCache.put(pic_url, bitmap); } else { return; } Message message = handler.obtainMessage(0, pic_url); handler.sendMessage(message); } }.start(); } else { holder.pic.setImageResource(R.drawable.book_default); } if (null != data.get(position).getbookname()) { holder.title.setText(data.get(position).getbookname()); } String status = "[����]"; if (data.get(position).getstatus() == 1 || data.get(position).getstatus() == 2) { status = "[ȫ��]"; } holder.status.setText(status); if (null != data.get(position).getauthor_name()) { holder.author.setText("���ߣ�" + data.get(position).getauthor_name()); } if (null != data.get(position).getdesc()) { holder.desc.setText("��飺" + data.get(position).getdesc()); } if (position % 2 == 0) holder.layout.setBackgroundResource(R.drawable.listview_white_selector); else holder.layout.setBackgroundResource(R.drawable.listview_gray_selector); return convertView; } private class HolderView { RelativeLayout layout; ImageView pic; TextView title; TextView status; TextView author; TextView desc; } }