Android Adapter e ListView diegozabot@yahoo.it
Funzionamento di un Adapter Quando il contenuto del layout non è predeterminato o è dinamico possono essere utilizzati gli Adapter. Un Adapter recupera i dati da una sorgente (un database, un array o dalle risorse), utilizza una View (predefinita o definita dall utente) e converte il tutto in View visualizzate da un AdapterView. View AdapterView Dati Adapter View View View
AdapterView Solitamente si utilizza un layout esteso dalla classe AdapterView. Questo tipo di layout utilizza un Adapter per combinare dati con le View relative. Sottoclassi di AdapterView che utlizzano gli Adapter sono ad es.: ListView, GridView, Gallery, Spinner. ListView GridView Gallery Spinner
Specializzazioni di Adapter Per recuperare i dati utilizziamo specializzazioni di Adapter, ad esempio: ArrayAdapter<String> per una singola riga di informazione di tipo testo HashMap<String, String> o HashMap<String, ArrayList> per più righe di informazione di tipo testo SimpleCursorAdapter per recuperare dati provenienti da elementi di tipo Cursor (db) o creiamo direttamente una specializzazione di BaseAdapter per fare esattamente quello che ci serve (utilizzato per le immagini).
ListView (1) E una View che mostra una lista di elementi. Le caratteristiche grafiche del singolo elemento possono essere configurate mediante un layout xml oppure mediante layout predefiniti. Procedura: java.lang.object android.view.view android.view.viewgroup android.widget.adapterview<t> android.widget.abslistview android.widget.listview 1. Creare la ListView nell xml 2. Ottenere il riferimento alla ListView nel codice java 3. Creare un insieme di dati da visualizzare (es. array, risorsa, database) 4. Utilizzare un adapter che colleghi i dati a una View di riga 5. Agganciare l adapter alla ListView ListView Dati String[] nomi = { Giovanni, Martina, Giuseppe, } Modello Riga Risultato
ListView (2) Utilizzo: ListView listview = (ListView) findviewbyid(r.id.listview); ArrayAdapter<String> adapter = new ArrayAdapter<String>( Context context, // this o getapplicationcontext() int textviewresid, // un item predefinito o uno xml Objects[] objects); // la sorgente dati listview.setadapter(adapter); Objects è di norma un array di String. In caso contrario viene utilizzato il metodo tostring dell oggetto per ricavarne una stringa. *Se la ListView è l unico controllo presente nell Activity allora è consigliabile utilizzare la classe ListActivity (che è una activity con incorporata una ListView)
ListView (3) Esempio: ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, android.r.layout.simple_list_item_1, arraystringhe); In questo caso utilizziamo un elemento preso dalla libreria di Android: android.r.layout.simple_list_item_1. Potremmo creare semplicemente un layout con una TextView con un formato a piacere e fare riferimento a questa.
ArrayAdapter (1) Prendiamo in esame i seguenti costruttori di ArrayAdapter. Possiamo utilizzare sia un array che una lista (es. ArrayList): ArrayAdapter adapter = new ArrayAdapter<T>( Context context, int textviewresourceid, Objects[] objects); ArrayAdapter adapter = new ArrayAdapter<T>( Context context, int textviewresourceid, List objects);
ArrayAdapter (2) In questo caso, la nostra View di riga può essere interna ad un layout. Specifichiamo il layout e la View: ArrayAdapter adapter = new ArrayAdapter<T>( Context context, int layoutresourceid, int textviewresourceid, Objects[] objects List objects); Indico che voglio utilizzare la TextView textviewresourceid che si trova nel layout layoutresourceid.
Gestione della selezione (1) L evento generato dalla scelta è catturato dal Listener OnItemClickListener. Vediamo come impostarlo e quali metodi implementa: listview.setonitemclicklistener(new OnItemClickListener() { public void onitemselected(adapterview<?> parent, View view, int position, long id) { // gestione dell'evento } });
Gestione della selezione (2) Vediamo in dettaglio il metodo onitemclick: public void onitemclick(adapterview<?> parent, View view, int position, long id) { Toast.makeText( getapplicationcontext(), "Hai selezionato l'elemento " + position, Toast.LENGTH_SHORT).show(); } Nel caso di elemento selezionato, parent punta alla ListView, view è la View selezionata, position indica l elemento (partendo da 0) e id indica la riga della risorsa.
Esercizio ListView Creare una activity che mostri una listview con i giorni della settimana e mostri con un Toast il giorno selezionato.