2010-07-05 6 views
5

J'ai des problèmes pour implémenter un chargeur d'image asynchrone sur le code suivant. J'ai lu quelques articles sur le Web à ce sujet et je pense que je comprends la logique derrière, mais je semble échouer dans la mise en œuvre.Chargeur d'images asynchrone sur listview [Android]

Le code ci-dessous est ce que j'utilise pour simplement charger les images dans ma listview.

public class MyCustomAdapter extends ArrayAdapter<RSSItem> { 
    Bitmap bm; 

    public MyCustomAdapter(Context context, int textViewResourceId, List<RSSItem> list) { 
     super(context, textViewResourceId, list); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     BitmapFactory.Options bmOptions; 
     bmOptions = new BitmapFactory.Options(); 
     bmOptions.inSampleSize = 1; 
     bm = LoadImage(myRssFeed.getList().get(position).getDescription(), bmOptions); 

     View row = convertView; 

     if(row == null) { 
     LayoutInflater inflater = getLayoutInflater(); 
     row = inflater.inflate(R.layout.rsslist, parent, false); 
     } 

     TextView listTitle = (TextView)row.findViewById(R.id.listtitle); 
     listTitle.setText(myRssFeed.getList().get(position).getTitle()); 
     ImageView listDescription = (ImageView)row.findViewById(R.id.listdescription); 
     listDescription.setImageBitmap(bm); 
     TextView listPubdate = (TextView)row.findViewById(R.id.listpubdate); 
     listPubdate.setText(myRssFeed.getList().get(position).getPubdate()); 

     return row; 
    } 
} 

Répondre

8

Vous pouvez utiliser mon exemple de code comme référence Lazy load of images in ListView

+0

Oh c'est vraiment utile! Merci pour ça. Je vais vérifier tout de suite. – thpoul

+0

Votre code fonctionne très bien quand je l'exécute sur le compilateur et fait exactement ce que je suis en train de faire. Malheureusement. Je ne peux pas l'implémenter sur mon projet de lecteur rss. J'apprécierais vraiment une main dans ceci. Merci d'avance. – thpoul

+0

Vous pouvez utiliser LazyAdapter tel quel. Passez simplement un tableau d'URL à celui-ci. Et spécifiez R.layout.rsslist dans getView R.layout.item. Devrait travailler après ça. – Fedor

0

sur la solution serait de remplir une variable de classe au sein de votre adaptateur, disons, un ArrayList avec les références tous les « ImageView listDescription »

ArrayList<ImageView> allImageViews = new ArrayList<ImageView>();  
    ... 

    public View getView(int position, View convertView, ViewGroup parent){ 
     ... 
     ImageView listDescription=(ImageView)row.findViewById(R.id.listdescription); 
     allImageViews.add(listDescription); 
     ... 
    } 

    private class ImageDownLoader extends AsyncTask<ArrayList, Void, Void>{ 
     doInBackground(){ 
     for(ImageView imageView: allImageViews){ 
     BitmapFactory.Options bmOptions; 
     bmOptions = new BitmapFactory.Options(); 
     bmOptions.inSampleSize = 1; 
     bm = LoadImage(imageNameOrWhatever, bmOptions); 
     imageView.setImageBitmap(bm); 
     } 
    } 

Ensuite, utilisez un AsyncTask qui passe par chaque ImageView, récupère l'image associée et supprime ImageView de ArrayList. Il sera téléchargé un à la fois en arrière-plan pendant que votre interface répondra.

+0

Merci d'avoir pris le temps de répondre! J'ai déjà essayé, mais je dois faire quelque chose de mal, ou manquer quelque chose et je n'ai pas été capable de l'appliquer. – thpoul

1

Avez-vous regardé SmartImageView? http://loopj.com/android-smart-image-view/

Il est très simple bibliothèque pour charger des images de manière asynchrone (:

quelques caractéristiques de cette bibliothèque

Drop-in de remplacement pour ImageView Charger les images à partir d'une URL Charger les images de contacts du carnet d'adresses du téléphone Chargement asynchrone des images, chargement en dehors du fil de l'interface utilisateur Les images sont mises en mémoire cache et sur disque pour un chargement super rapide La classe SmartImage peut facilement être étendue à partir d'autres sources

+0

Bienvenue dans Stack Overflow. Veuillez résumer le lien dans votre réponse. De cette façon, si le lien est périmé, la réponse ne sera pas complètement inutile. – michaelb958

+0

Merci l'homme! Désolé pour ça. – alexandreferreira