2010-07-05 12 views
5

Mam problemy z zaimplementowaniem asynchronicznego programu ładującego obrazy do następującego kodu. Czytałem kilka postów w internecie na ten temat i myślę, że rozumiem logikę stojącą za tym, ale wydaje mi się, że nie udało mi się go wdrożyć.Asynchroniczny program ładujący obraz w widoku listy [Android]

Poniższy kod służy do ładowania obrazów w widoku listy.

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; 
    } 
} 

Odpowiedz

8

Można używać przykładowy kod jako odniesienie Lazy load of images in ListView

+0

Och, to naprawdę pomocne! Dziękuję Ci za to. Sprawdzę to od razu. – thpoul

+0

Twój kod działa naprawdę dobrze, gdy uruchamiam go w kompilatorze i robię dokładnie to, co robię. Niestety. Nie mogę go wdrożyć w moim projekcie czytnika rss. Byłbym bardzo wdzięczny za to. Z góry dziękuję. – thpoul

+0

Możesz użyć LazyAdapter tak jak jest. Po prostu przekazuj do niego tablicę adresów URL. I podaj R.layout.rsslist w getView R.layout.item. Powinien działać po tym. – Fedor

0

Na rozwiązaniem byłoby zapełnić zmienną klasy wewnątrz karty, powiedzmy, ArrayList z odniesieniami wszystkie „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); 
     } 
    } 

Następnie użyć AsyncTask który przechodzi przez każdy ImageView, pobiera powiązany obraz i usuwa ImageView z ArrayList. Będzie pobierać jeden na raz w tle, podczas gdy twoje gui nadal będzie odpowiadać.

+0

Dziękujemy za poświęcenie czasu na odpowiedź! Próbowałem już tego, ale musiałem robić coś złego, albo czegoś brakuje i nie byłem w stanie go wdrożyć. – thpoul

1

Szukały SmartImageView? http://loopj.com/android-smart-image-view/

To bardzo proste biblioteki do ładowania obrazów asynchronicznie (:

Niektóre funkcje tej biblioteki

zamiennik dla ImageView Załaduj zdjęcia z URL Załaduj zdjęcia z kontaktów książki adresowej telefonu Asynchroniczne ładowanie obrazów, ładowanie odbywa się poza wątkiem interfejsu użytkownika Obrazy są zapisywane w pamięci podręcznej i na dysku w celu super szybkiego ładowania. Klasa SmartImage jest łatwo rozszerzalna do ładowania z innych źródeł.

+0

Witamy w przepełnieniu stosu. Podsumuj link w swojej odpowiedzi; w ten sposób, jeśli link zanika, odpowiedź nie będzie całkowicie bezużyteczna. – michaelb958

+0

Dzięki człowieku! Przepraszam za to. – alexandreferreira

Powiązane problemy