Bonjour,
J'affiche une liste avec une ImageView et une TextView. Je voudrais télécharger de façon asynchrone les images et les afficher au fur et à mesure qu'elles soient télécharger pour ne pas trop ralentir la navigation entre les fenêtres.

J'appelle mon AsyncTask pour chaque nouvel item directement dans l'adaptateur, voilà le code :
La classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
public class DownloadImageTask extends AsyncTask<String, Void, Drawable> {
 
    private static HashMap<String, Drawable> listImages = new HashMap<String, Drawable>();    
    private static ImageView _imgView;
 
    public DownloadImageTask(ImageView imgView){
        super();
        _imgView = imgView;
 
    }
 
    protected Drawable doInBackground(String... url) {
        return loadImageFromUrl(url[0]);
    }
 
    protected void onPostExecute(Drawable result) {
        try{
            _imgView.setImageDrawable(result);
        } catch (Exception e) {
        _imgView.setImageResource(R.drawable.ic_menu_info_details);
        }
    }
 
 
    public static Drawable loadImageFromUrl(String url) {
 
          if (!listImages.containsValue(url)) {
            InputStream inputStream;
            try {
              inputStream = new URL(url).openStream();
            } catch (IOException e) {
              throw new RuntimeException(e);
            }
           Drawable dr = Drawable.createFromStream(inputStream, "src");
           listImages.put(url, dr);
           return dr;
 
          } else {
 
             return listImages.get(url);
 
          }
 
    }
 
}
L'adaptateur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
public class ItemAdapter extends ArrayAdapter<Item>{
 
 
    int resource;
    private static ImageView imgView;
 
    public ItemAdapter(Context _context, int _resource, List<Item> _items) {
        super(_context, _resource, _items);
        resource = _resource;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
 
        LinearLayout newsView;
 
        Item item = getItem(position);
 
        String strPubDate = item.pubDate;
 
        String title = item.getTitle();
 
        String imgUrl = item.getImageUrl();
 
        if (convertView == null){
            newsView = new LinearLayout(getContext());
            String inflater = Context.LAYOUT_INFLATER_SERVICE;
            LayoutInflater vi;
            vi = (LayoutInflater)getContext().getSystemService(inflater);
            vi.inflate(resource, newsView, true);
        }
        else {
            newsView = (LinearLayout) convertView;
        }
 
 
        TextView txtTitle = (TextView)newsView.findViewById(R.id.txtTitleItemSummary);
        txtTitle.setText(title);
 
         imgView = (ImageView)newsView.findViewById(R.id.imgViewItemSummary);
 
 
 
            imgView.setImageResource(R.drawable.icon);
 
 
            DownloadImageTask dit = new DownloadImageTask(imgView);
            dit.execute(imgUrl);
 
 
 
 
 
        if(!item.pubDate.equals("")){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.FRANCE);
        try {
            Date d = sdf.parse(strPubDate);
            TextView txtDate = (TextView)newsView.findViewById(R.id.txtPubDateElement);
 
            txtDate.setText("Publié le " + DateFormat.format("dd/MM/yyyy", d));
 
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
 
        return newsView;
    }
Alors, je vois les images apparaitre au fur et à mesure, mais elles toutes dans la même ImageView, plus précisement la dernière de ma liste ! Une idée du problème ?