Android – Custom ListView
La listview standard di Android, prevede di default elementi con una sola riga di testo.
Per utilizzare un layout diverso dei singoli elementi, procediamo come segue:
1) Creiamo un file che descriva il layout della riga che vogliamo ottenere.
Consideriamo, ad esempio, di voler ottenere 2 caselle di testo per ogni elemento della ListView:
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>
<TextView
android:id=”@+id/textdistance”
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”wrap_content”
android:textSize=”16sp”
android:paddingLeft=”10px”
android:paddingRight=”20px”
android:layout_height=”wrap_content”
android:textColor=”@color/white”
android:textStyle=”bold”
></TextView>
<TextView
android:id=”@+id/textaddress”
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”wrap_content”
android:textStyle=”italic”
android:layout_height=”wrap_content”
android:paddingTop=”2dp”
android:paddingBottom=”2dp”
android:textColor=”@color/white”
android:textSize=”16sp” ></TextView>
</LinearLayout>
salviamo questo file al path res/layout e chiamiamolo (ad esempio) address_row.xml
2) Per utilizzare questo layout all’interno di una lista è necessario definire una nuova classe che estenda un ArrayAdapter. Nello specifico ci serve gestire il nuovo layout nel momento in cui l’ArrayAdapter sarà visualizzato a video, presteremo perciò particolare attenzione al metodo getView.
super(Main.this, R.layout.address_row,R.id.textaddress, ArrayList<String> aliasIndirizzi);
ArrayList<String> aliasIndirizzi = new ArrayList<String>();
ArrayAdapter<String> aaIndirizzi;
aaIndirizzi = new AddressAdapter(aliasIndirizzi);
indirizziListView.setAdapter(aaIndirizzi);