Autore Topic: download immagine da arrayadapter  (Letto 556 volte)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
download immagine da arrayadapter
« il: 02 Marzo 2012, 10:52:49 CET »
0
Salve ragazzi ho un problema che non sto riuscendo a risolvere ma perchè non ci arrivo nemmeno concettualmente. Allora io ho una listview con layout customizzato al cui interno c'è una imageview. In questa imageview ci deve andare una locandina che devo scaricare da un server remoto utilizzando l'url che mi ritrovo nell'oggetto che sto mostrando nella lista.
Ovviamente il metodo di download deve essere eseguito in un asynctask per non bloccare la UI ma dove implemento questo asynctask? Direttamente nel mio arrayadapter? E se si come aggiorno poi la imageview di quella riga una volta ottenuta l'immagine?

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:download immagine da arrayadapter
« Risposta #1 il: 02 Marzo 2012, 12:14:43 CET »
0
Aggiorno per dire che sono quasi riuscito nel mio intento. Dico quasi perchè alle volte in alcune righe compare la locandina errata e non sto riuscendo a capirne il motivo. Posto il mio adapter
Codice (Java): [Seleziona]
public class EventoFacebookAdapter extends ArrayAdapter<EventoFacebookFiesta> {


        private int             resource;
    private LayoutInflater  inflater;


    public EventoFacebookAdapter ( Context context, int resourceId, List<EventoFacebookFiesta> objects ) {
            super( context, resourceId, objects );
            resource = resourceId;
            inflater = LayoutInflater.from( context );
    }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
               
                EventoFacebookFiesta evento = getItem(position);
                EventoFacebookViewCache viewCache;
               
                if ( convertView == null ) {
            convertView = ( LinearLayout ) inflater.inflate( resource, null );
            viewCache = new EventoFacebookViewCache( convertView );
            convertView.setTag( viewCache );
                } else {
            convertView = ( LinearLayout ) convertView;
            viewCache = ( EventoFacebookViewCache ) convertView.getTag();
                }
               
                new LocandinaDownloader(evento.getImg_evento(), viewCache.getImmagineEvento()).execute();


                TextView textViewNomeEvento = viewCache.getTextViewNomeEvento();
                textViewNomeEvento.setText(evento.getNome_evento());
               
                TextView textViewData = viewCache.getTextViewData();
                textViewData.setText(evento.getData_evento());
               
                TextView textViewLuogo = viewCache.getTextViewLuogo();
                textViewLuogo.setText(evento.getObjLocale().getLocalita_locale());
               
                return convertView;
        }


        private class LocandinaDownloader extends AsyncTask<Void, Void, Void> {
               
                private String fileUrl;
                private Bitmap bitmap = null;
                private ImageView imageView;
               
                public LocandinaDownloader(String fileUrl, ImageView imageView) {
                        this.fileUrl = fileUrl;
                        this.imageView = imageView;
                }


                @Override
                protected Void doInBackground(Void... params) {
                        this.bitmap = Downloader.imageDownload(fileUrl);
                        return null;
                }


                @Override
                protected void onPostExecute(Void result) {
                        if (bitmap != null) {
                                imageView.setImageBitmap(bitmap);
                        }
                }
        }
}