I cookie permettono il funzionamento di alcuni servizi di questo blog. Utilizzando questi servizi, accetti l'utilizzo dei cookie da parte nostra. Ok Rifiuta

Creare una list view con Custom Adapter in Android

Ciao, dopo aver realizzato una semplice listview in Android iniziamo a vedere come applicare un custom Adapter per realizzarne una più complessa. Innanzitutto creiamo con il linguaggio XML un listitem, cioé un elemento singolo della lista, in questo modo:

listitem.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:padding="5dip" >
 
    <!--  immagine sinistra -->
    <LinearLayout android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dip"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="5dip">
 
        <ImageView
            android:id="@+id/list_image"
            android:layout_width="45dip"
            android:layout_height="45dip"
            android:contentDescription="image"
            android:src="@drawable/icon"/>
 
    </LinearLayout>
 
    <!-- Titolo della canzone-->
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:text="Message in a bottle"
        android:textColor="#040404"
        android:typeface="sans"
        android:textSize="17dip"
        android:textStyle="bold"/>
 
    <!-- Nome dell'artista -->

    <TextView
        android:id="@+id/description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/thumbnail"
        android:layout_toLeftOf="@+id/arrow"
        android:text="Police"
        android:textColor="#343434"
        android:textSize="12dip" />
 
     <!-- Freccia -->
     <ImageView
        android:id="@+id/arrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:src="@drawable/arrow"/>
 
</RelativeLayout>

Fatto questo dobbiamo creare il layout con la listview della nostra MainActivity sempre in XML:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Camper" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/gradient_bg"
        android:divider="#005b00"
        android:dividerHeight="1dp" />

</RelativeLayout>

Ora arrivati a questo punto dobbiamo creare una classe per istanziare degli oggetti di tipo ElementoLista con i suoi metodi Getter e Setter:

ElementoLista.java

public class ElementoLista {

    private String titolo;
    private String descrizione;

    public ElementoLista(String titolo, String descrizione) {
        this.titolo = titolo;
        this.descrizione = descrizione;
    }

    public String getTitolo() {
        return titolo;
    }

    public void setTitolo(String titolo) {
        this.titolo = titolo;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

}

Fatto questo dobbiamo assegnare i dati del nostro oggetto al listitem. per fare questo abbiamo bisogno del CustomAdapter:

CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<ElementoLista>{

    public CustomAdapter(Context context, int textViewResourceId,
            List <ElementoLista> objects) {
        super(context, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) getContext()
             .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.listitem, null);
        TextView titolo = (TextView)convertView.findViewById(R.id.title);
        TextView descrizione = (TextView)convertView.findViewById(R.id.description);
        ElementoLista c = getItem(position);
        titolo.setText(c.getTitolo());
        descrizione.setText(c.getDescrizione());
        return convertView;
    }

}

Nella nostra MainActivity quindi inizializiamo la listview e istanziamo gli oggetti:

MainActivity.java

        setContentView(R.layout.activity_main);
       
        ListView listView = (ListView)findViewById(R.id.list);
       
        List <ElementoLista> list = new LinkedList <ElementoLista>();
        list.add(new ElementoLista("Police","Don't stand so close to me"));
        list.add(new ElementoLista("Rihanna","Love the way you lie"));
        list.add(new ElementoLista("Marco Mengoni","L'essenziale"));
       
        CustomAdapter adapter = new CustomAdapter(this, R.layout.listitem, list);
        listView.setAdapter(adapter);

Infine quindi avremo una lista composta dal layout listitem e con i dati (titolo e artista) che abbiamo passato al costruttore dell'oggetto ElementoLista. Questo è un semplice esempio da raffinare ma che costituisce una buona base di partenza per creare liste personalizzate.

I più letti

Seguici su Facebook

Seguici su Google+

Renzo Cappelli

miafoto

Sono un appassionato di informatica, mi dedico allo sviluppo web e alla gestione dei sistemi web-based: realizzo siti e progetto software gestionale per privati e aziende. Ho tanta passione per tutto quello che riguarda il web e le nuove tecnologie, lavoro bene in team e collaboro con aziende e professionisti di settore.

Commenti

utente
Andrea ha scritto il 30/11/2014 - 12:33:48 :

Ciao mi chiedevo, facendo riferimento al tuo esempio come era possibile aggiungere un evento ItemClickListener? Grazie.
renzo cappelli
Renzo ha scritto il 30/11/2014 - 13:08:46 :

Ciao Andrea, per aggiungere un evento ItemClickListener a questo esempio potremmo scrivere:

listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id){

switch(position){

   case 0://codice che verrà eseguito quando farai tap sul primo elemento della lista; break;

   case 1://codice che verrà eseguito quando farai tap sulsecondo elemento della lista;break; }

});

In parole povere position è la posizione dell'elemento su cui l'utente fa tap. Nel costrutto switch possiamo richiamare qualsiasi funzione anche una nuova Activity.

utente
Ivan ha scritto il 09/05/2017 - 16:00:40 :

Grazie mille per la dritta!

Lascia il tuo commento