public class NetImgAdapter extends BaseAdapter{
private Context context;
private List<HashMap<String, String>> dataList;
private int itemId;
private String[] fromArr;
private int[] toArr;
//bitmap哈希
private HashMap<String, Bitmap> bitmapHashMap = new HashMap<String, Bitmap>();
private Bitmap bitmap;
//异步处理类
private MyHendler myHendler = new MyHendler();
/**
*
* @param context 上下文对象
* @param dataList listview数据
* @param itemId item layout布局id
* @param fromArr 需要显示的数据
* @param toArr 数据的布局id
*/
public NetImgAdapter(Context context, List<HashMap<String, String>> dataList, int itemId, String[] fromArr, int[] toArr) {
this.context = context;
this.dataList = dataList;
this.itemId = itemId;
this.fromArr = fromArr;
this.toArr = toArr;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return dataList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return dataList.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) {
if (convertView == null) {
convertView = LayoutInflater.from(context)
.inflate(itemId, parent, false);
}
for (int i = 0; i < toArr.length; i++) {
View v = ViewHolder.get(convertView, toArr[i]);
if (v instanceof TextView) {
//view是textview
TextView tv = (TextView) v;
String content = dataList.get(position).get(fromArr[i]);
tv.setText(content);
}
if (v instanceof ImageView) {
ImageView iv = (ImageView) v;
final String content = dataList.get(position).get(fromArr[i]);
bitmap = bitmapHashMap.get(content);
if (bitmap != null) {
//已经加载了图片,直接显示
iv.setImageBitmap(bitmap);
} else {
new Thread() {
@Override
public void run() {
//没有加载图片,从网络加载
bitmap = HttpHelper.getBitMap(content);
//bitmapArray.put(toArr[i], bitmap);
bitmapHashMap.put(content, bitmap);
myHendler.sendEmptyMessage(0);
super.run();
}
}.start();
}
}
}
return convertView;
}
private class MyHendler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
notifyDataSetChanged();
break;
default:
break;
}
super.handleMessage(msg);
}
}
}
调用与simpleadapter一样,图片用url传入,可以直接从网络加载带图片的列表
通用viewholder,减少内存
public class ViewHolder {
// I added a generic return type to reduce the casting noise in client code
@SuppressWarnings("unchecked")
public static <T extends View> T get(View view, int id) {
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
if (viewHolder == null) {
viewHolder = new SparseArray<View>();
view.setTag(viewHolder);
}
View childView = viewHolder.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHolder.put(id, childView);
}
return (T) childView;
}
}