Livello di difficoltà: facile.
Versione target SDK utilizzata: 19.
Versione minima SDK: 8.
In questo tutorial spiegherò come realizzare una ListView con un adattatore personalizzato, in base alle proprie esigenze. Per questa guida l'adapter sarà composto semplicemente da una ImageView e due TextView. Iniziamo!
Per prima cosa è necessario creare il layout collegato all'activity principale, che avrà come unico elemento una semplice ListView. Andiamo quindi in /res/layout/ apriamo il file activity_main.xml e inseriamo al suo interno:
Quindi rechiamoci nell'Activity principale in /src/ e apriamo MainActivity.java. Inseriamo:
Le prime tre righe di codice prevedono la dichiarazione di due array di stringhe (String[]), l'Adapter (che creeremo tra poco) e la ListView. Per creare l'Adapter torniamo nuovamente in /res/layout/ e creiamo un nuovo file che chiameremo adapter.xml. Inseriamo:
Quindi, di nuovo in /src/ creiamo una classe che chiamiamo Adapter.java, nella quale inseriremo:
Come vedete il costruttore prevede tre parametri: il contesto, l'array di stringhe dei testi e dei sotto-testi. Il metodo getView() è molto importante. Esso si occupa della gestione del singolo elemento dalla lista. I parametri al suo interno sono: la posizione, view e parent. Soffermiamoci su questi ultimi due: il parametro view, se opportunamente ottimizzato ci permette di rendere la lista molto fluida nello scroll ed evitare quindi i fastidiosi lag dovuti, appunto, alla mancata ottimizzazione. In maniera spicciola, view ci consente di riciclare l'eventuale View che anzichè essere "rigenerata" viene riciclata, ragion per cui viene fatto il controllo. Se è nulla, tramite l'operazione di Inflating la creiamo, altrimenti la ricicliamo. Il parametro parent è il contenitore avente il compito di raccogliere gli elementi generati dal metodo getView(). Generalmente è la ListView stessa. L'oggetto Holder consente di memorizzare il riferimento alle View in ogni singola riga della lista. Tramite il metodo setTag() associamo l'oggetto Holder alla View, per poi riottenerlo col getTag(). Questi piccoli accorgimenti nel complesso rendono la lista efficiente, evitando sprechi di risorse, di memoria, oltre che evitano il presentarsi di lag/impuntamenti.
Questo è tutto. Per ulteriori chiarimenti potete scrivere in questa discussione. Un ringraziamento speciale all'utente supertommino.