Autore Topic: ListView con immagini dal web  (Letto 387 volte)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
ListView con immagini dal web
« il: 03 Ottobre 2014, 11:45:04 CEST »
0
Salve ragazzi,
ho realizzato una listView utilizzando un SimpleAdapter ma come faccio ad inserire nelle righe le immagini prese dal web?
Codice (Java): [Seleziona]
                ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();              
                adapter = new SimpleAdapter(getApplicationContext(),
                                list,
                                R.layout.smart_tour_list_row,
                                new String[]{"article", "icon", "title", "description"},            //article ed icon sono 2 url che contengono immagini
                                new int[]{R.id.imageViewArticle, R.id.imageViewIcon, R.id.textViewTitle, R.id.textViewDetail});


Grazie

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:ListView con immagini dal web
« Risposta #1 il: 03 Ottobre 2014, 14:06:06 CEST »
0
Credo che dovresti ridefinirti un adapter che non sia un SimpleAdapter, per esempio un ArrayAdapter, e sovrascrivere il metodo getView per piazzare i dati nelle giuste View del list item. Ci sono un mare di esempi online: leggi qui, qui e qui.
Per quanto riguarda l'utilizzo delle immagini prese dal web (ma non solo per questo), ti consiglio di utilizzare la libreria Picasso. Ti semplifica di parecchio la vita.

Codice (Java): [Seleziona]
public class MyAdapter extends ArrayAdapter<...> {
     ...
     public View getView (int position, View convertView, ViewGroup parent) {
          ...
     }
     ...
}

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:ListView con immagini dal web
« Risposta #2 il: 03 Ottobre 2014, 16:15:28 CEST »
0
Ho risolto con questo snippet
Codice (Java): [Seleziona]
public class TourImageLoadTask extends AsyncTask<Void, Void, Bitmap> {

    private String url;
    private ImageView imageView;

    public TourImageLoadTask(String url, ImageView imageView) {
        this.url = url;
        this.imageView = imageView;
    }

    @Override
    protected Bitmap doInBackground(Void... params) {
        try {
            URL urlConnection = new URL(url);
            Log.e("url", url);
           
            HttpURLConnection connection = (HttpURLConnection) urlConnection.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            Log.e("Bitmap","returned");
            return myBitmap;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);
        imageView.setImageBitmap(result);
    }

}

Richiamo la classe in questo modo
Codice (Java): [Seleziona]
setListAdapter(new TourCustomAdapter(getApplicationContext(), list));
In cui "list" è un ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>().


Ora ho un altro problemino...
Come faccio a mostrare una progressBar durante il caricamento?

Non mi sto raccapezzando più...  o_O

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:ListView con immagini dal web
« Risposta #3 il: 03 Ottobre 2014, 18:56:33 CEST »
+1
Per queste cose ci sono librerie già pronte. Io ho usato Picasso:

Codice (Java): [Seleziona]
picasso.load(path + fileName).placeholder(placeHolderId).into(view, callBack);
Dove path+filename è il path dell'immagine su web, placeholderId è una risorsa android (res/drawable/placeholderId.png) e la view è la imageView da settare l'immagine. La callback...vedi PicassoCallback.