package cn.wangmeng.test;
import java.util.List;
import cn.wangmeng.test.AsyncImageLoader.ImageCallback;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* 数据适配器类
*@author hsx
*@date 2012-11-21
*@Description
*/
public class ImageAndTextListAdapter extends ArrayAdapter<ImageAndText>
{
private ListView listView;
private AsyncImageLoader asyncImageLoader;
/**
* 构造函数
* @param activity
* @param imageAndTexts
* @param listView
*/
public ImageAndTextListAdapter(Activity activity, List<ImageAndText> mData, ListView listView)
{
super(activity, 0, mData);
this.listView = listView;
asyncImageLoader = new AsyncImageLoader();
}
public View getView(int position, View convertView, ViewGroup parent)
{
Activity activity = (Activity) getContext();
ViewHolder holder = null;
// if (convertView == null)
// {
/**
* 装载listview的布局文件
*/
LayoutInflater inflater = activity.getLayoutInflater();
convertView = inflater.inflate(R.layout.image_and_text_row, null);
/**
* 将convertView赋给viewholder的构造函数,赋给了ViewHolder的baseView
*/
holder = new ViewHolder(convertView);
convertView.setTag(holder);
// }
/**
* 此处容易发生listview显示混乱问题
*/
// else
// {
// holder = (ViewHolder) convertView.getTag();
// }
/**
* 获取mData中的每一项
*/
ImageAndText imageAndText = getItem(position);
// 装载图片
String imageUrl = imageAndText.getImageUrl();
ImageView imageView = holder.getImageView();
imageView.setTag(imageUrl);
// Drawable cachedImage = asyncImageLoader.loadDrawable(imageUrl,
// new ImageCallback()
// {
// public void imageLoaded(Drawable imageDrawable, String imageUrl)
// {
// /**
// * 此方法中的imageUrl实际上是前面那个imageUrl经过多次传递得到的,实际上就是图片的imageUrl
// */
// ImageView imageViewByTag = (ImageView) listView.findViewWithTag(imageUrl);
// if (imageViewByTag != null)
// {
// imageViewByTag.setImageDrawable(imageDrawable);
// }
// }
// });
Drawable cachedImage = asyncImageLoader.loadDrawable(imageUrl,new ImageCallbackImp());
if (cachedImage == null)
{
imageView.setImageResource(R.drawable.default_image);
}else
{
imageView.setImageDrawable(cachedImage);
}
// 装载文字信息
TextView textView = holder.getTextView();
textView.setText(imageAndText.getText());
return convertView;
}
public class ImageCallbackImp implements ImageCallback
{
public void imageLoaded(Drawable imageDrawable, String imageUrl)
{
/**
* 此方法中的imageUrl实际上是前面那个imageUrl经过多次传递得到的,实际上就是图片的imageUrl
*/
ImageView imageViewByTag = (ImageView) listView.findViewWithTag(imageUrl);
if (imageViewByTag != null)
{
imageViewByTag.setImageDrawable(imageDrawable);
}
}
}
}