用一個Map<Integer,Bitmap>
cavasImageTask取到圖片後把圖片放到map裏
鍵是listivew的position。
在getView裏面先判斷map裏是否有,如果有直接拿,沒有的話再asyncTask.execute.
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
holder = new NewsHolder();
convertView = inflater.inflate(R.layout.newitem, null);
holder.img = (ImageView) convertView.findViewById(R.id.img);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.content = (TextView) convertView.findViewById(R.id.content);
convertView.setTag(holder);
} else {
holder = (NewsHolder) convertView.getTag();
}
holder.img.setId(position);
holder.img.setTag(this.imgPath[position]);
info = newsList.get(position);
if (info != null) {
holder.title.setText(info.getTitle());
holder.content.setText(info.getContent());
}
if (map.containsKey(position + "")) {
holder.img.setimagebitmap(map.get(position));
} else {
holder.img.setimagebitmap(null);
}
//這裏是異步調用圖片
new CanvasImageTask().execute(holder.img);
holder.img.setDrawingCacheEnabled(true);
return convertView;
}
public class CanvasImageTask extends AsyncTask < ImageView,
Void,
Bitmap > {
private ImageView gView;
protected Bitmap doInBackground(ImageView...views) {
Bitmap bmp = null;
ImageView view = views[0];
// 根據iconUrl獲取圖片並渲染,iconUrl的url放在了view的tag中。
if (view.getTag() != null) {
try {
URL url = new URL(view.getTag().toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream stream = conn.getInputStream();
bmp = BitmapFactory.decodeStream(stream);
stream.close();
} catch(Exception e) {
Log.v("img", e.getMessage());
return null;
}
}
this.gView = view;
return bmp;
}
protected void onPostExecute(Bitmap bm) {
if (bm != null) {
//此處更新圖片
this.gView.setImageBitmap(bm);
this.gView = null;
}
}