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.

public class AddressAdapter extends ArrayAdapter<String> {
ArrayList<String> _indirizzi;
AddressAdapter(ArrayList<String> _indirizziin)
        {

   super(Main.this, R.layout.address_row,R.id.textaddress, ArrayList<String> aliasIndirizzi);

  _indirizzi=_indirizziin;
}
int layout_row=R.layout.address_row;
public View getView(int position, View convertView,ViewGroup parent)
        {
View row=convertView;
TextView indirizzo;//=(TextView)row.findViewById(R.id.newscanale);
TextView distanza;//=(TextView)row.findViewById(R.id.textcanale);
if (row==null) 
                 {
LayoutInflater inflater=getLayoutInflater();
row=inflater.inflate(layout_row, parent, false);
}
indirizzo=(TextView)row.findViewById(R.id.textaddress);
distanza=(TextView)row.findViewById(R.id.textdistance);
String alias=aliasIndirizzi.get(position);
String dist=”30″; //valore scelto a caso
    dist=dist+ ” Km”;
indirizzo.setText(alias);
distanza.setText(dist);
return(row);
}//end getView
}//AddressAdapter
In questo modo l’adapter restituirà la struttura che abbiamo definito nel file di layout.
3) Associamo adesso l’AddressAdapter alla lista ed il gioco è fatto 😉

ArrayList<String> aliasIndirizzi = new ArrayList<String>();

ArrayAdapter<String> aaIndirizzi;
aaIndirizzi = new AddressAdapter(aliasIndirizzi);
indirizziListView.setAdapter(aaIndirizzi);

Buon Lavoro…..

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

wp-puzzle.com logo