我有這個CustomAdapter,用我的數據填充一個列表。問題在於Imageview被下載並繪製了很多次。例如:自定義適配器重複
我搜到我的服務器的視頻列表:
(Video1) Title 1 Description 1
(Video2) Title 2 Description 2
(Video3) Title 3 Description 3
..
當這種負載,從視頻1加載圖像,然後在相同的ImageView的Video2Image負載,並再次對每個視頻列表,同一時間視頻如何在列表中。當我滾動適配器時,會再次下載所有圖像。有一些選項可以解決這個問題,我不理解這種行爲。
CustomAdapter.java
public class CustomAdapter extends ArrayAdapter<Video> {
// declaring our ArrayList of items
private ArrayList<Video> objects;
public CustomAdapter(Context context, int textViewResourceId, ArrayList<Video> objects) {
super(context, textViewResourceId, objects);
this.objects = objects;
}
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.list_row, null);
}
Video i = objects.get(position);
if (i != null) {
TextView title = (TextView) v.findViewById(R.id.title);
TextView description = (TextView) v.findViewById(R.id.description);
ImageView imagen = (ImageView) v.findViewById(R.id.list_image);
title.setText(i.getTitulo());
description.setText(i.getDescripcion());
//Creamos imagen descargada y la seteamos
new DownloadImageTask(imagen).execute(i.getUrlimagen());
BitmapDrawable drawable = (BitmapDrawable) imagen.getDrawable();
Bitmap bitmap = drawable.getBitmap();
imagen.setImageBitmap(bitmap);
Log.i("Debug", "Creando una imagen para: " + i.getTitulo());
v.setTag(R.id.id_url, i.getUrl().trim());//1.Url
v.setTag(R.id.id_titulo,i.getTitulo().trim());//2.Título
v.setTag(R.id.id_video,i.getId().trim());//3.ID
}
return v;
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
BitmapFactory BitmapFactory = null;
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
if(result!=null)
bmImage.setImageBitmap(result);
}
}
public ArrayList getValues(){
return objects;
}
}
對不起我的英語。
工程不錯!它是一個非常好的lib,謝謝! – Genaut