package org.carelife.creader.ui.adapter; import java.util.HashMap; import java.util.List; import org.carelife.creader.dao.RssData; import org.carelife.creader.util.AsynImageLoaderUtil; 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 NewsListAdapter extends BaseAdapter { Context context; List<RssData> data; 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 NewsListAdapter(Context context, List<RssData> result) { this.data = result; this.context = context; } 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.newslistitem, null); holder = new HolderView(); holder.pic = (ImageView) convertView .findViewById(R.id.news_list_pic); holder.title = (TextView) convertView .findViewById(R.id.news_list_title); holder.content = (TextView) convertView .findViewById(R.id.news_list_content); holder.layout = (RelativeLayout) convertView .findViewById(R.id.news_relative_layout); convertView.setTag(holder); } else { holder = (HolderView) convertView.getTag(); } if (null != data.get(position).getUrl()) { final String pic_url = data.get(position).getUrl(); imageViews.put(pic_url, holder.pic); 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; } } if (pic_url.equals("")) { 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 { // ����ͼƬ } if (null != data.get(position).getTitle()) { holder.title.setText(data.get(position).getTitle()); } String desp = data.get(position).getDescription(); if (null != desp) { holder.content.setText(desp.replaceAll("[ |��| ]*", "")); } 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 content; } }