Esempio SimpleAdapter con layout custom

In questo esempio viene mostrato come utilizzare un SimpleAdapter con un layout custom. La activity mostrerĂ  un elenco di paesi, e per ogni paese alcune informazioni aggiuntive come la superficie, la popolazione, il continente, la moneta. I dati verranno letti dal file strings.xml, metodo valido per un esempio; in un caso reale i dati verrebbero letti da un web service o da un database.

 

Creare un nuovo progetto android chiamato HelloSimpleAdapter2

 

L'activity estende una ListActivity

public class HelloSimpleAdapter2Activity extends ListActivity {

 

Creare nel file strings.xml una serie di array con i dati da visualizzare

    <string-array name="paese">
    	<item>Italia</item>
    	<item>Paesi Bassi</item>
    	<item>Spagna</item>
    	<item>Brasile</item>
    	<item>Marocco</item>
    	<item>Thailandia</item>
    </string-array>
    <string-array name="superficie">
    	<item>301.336</item>
    	<item>41.526</item>
    	<item>506.030</item>
    	<item>8.514.876</item>
    	<item>446.550</item>
    	<item>514.000</item>
    </string-array>
    <string-array name="popolazione">
    	<item>60.702.858</item>
    	<item>16.357.000</item>
    	<item>47.025.000</item>
    	<item>190.732.694</item>
    	<item>33.757.750</item>
    	<item>64.200.000</item>
    </string-array>
    <string-array name="continente">
    	<item>Europa</item>
    	<item>Europa</item>
    	<item>Europa</item>
    	<item>America del Sud</item>
    	<item>Africa</item>
    	<item>Asia</item>
    </string-array>
    <string-array name="moneta">
    	<item>Euro</item>
    	<item>Euro</item>
    	<item>Euro</item>
    	<item>Real brasiliano</item>
    	<item>Dirham</item>
    	<item>Baht</item>
    </string-array>

 

Nella activity vengono letti gli array di stringe prima creati e viene creata una lista di mappe contenente i dati

        String[] paesi = getResources().getStringArray(R.array.paese);
        String[] superfici = getResources().getStringArray(R.array.superficie);
        String[] popolazioni = getResources().getStringArray(R.array.popolazione);
        String[] continenti = getResources().getStringArray(R.array.continente);
        String[] monete = getResources().getStringArray(R.array.moneta);
        List<Map<String,String>> dati = new ArrayList<Map<String,String>>();
        for (int i = 0; i < paesi.length; i++) {
			Map<String,String> mappa = new HashMap<String,String>();
			mappa.put("paese", paesi[i]);
			mappa.put("superficie", superfici[i]);
			mappa.put("popolazione", popolazioni[i]);
			mappa.put("continente", continenti[i]);
			mappa.put("moneta", monete[i]);
			dati.add(mappa);
		}

 

Il layout main.xml viene modificato per rappresentare una singola riga di dati.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<LinearLayout android:layout_height="wrap_content"
		android:id="@+id/linearLayout1" android:layout_width="match_parent">
		<TextView android:layout_height="wrap_content" android:text="PAESE"
			android:textAppearance="?android:attr/textAppearanceLarge"
			android:id="@+id/textViewPaese" android:layout_width="match_parent"
			android:gravity="center"></TextView>
	</LinearLayout>
	<LinearLayout android:layout_height="wrap_content"
		android:id="@+id/linearLayout2" android:layout_width="match_parent">
		<TextView android:layout_height="wrap_content" android:text="Superficie:"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewLabelSuperficie" android:layout_width="130dip"
			android:gravity="right" android:layout_marginRight="10dip"></TextView>
		<TextView android:layout_height="wrap_content"
			android:layout_width="wrap_content" android:text="SUPERFICIE"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewSuperficie"></TextView>
	</LinearLayout>
	<LinearLayout android:layout_height="wrap_content"
		android:id="@+id/linearLayout2" android:layout_width="match_parent">
		<TextView android:layout_height="wrap_content" android:text="Popolazione:"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewLabelPopolazione" android:layout_width="130dip"
			android:gravity="right" android:layout_marginRight="10dip"></TextView>
		<TextView android:layout_height="wrap_content"
			android:layout_width="wrap_content" android:text="POPOLAZIONE"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewPopolazione"></TextView>
	</LinearLayout>
	<LinearLayout android:layout_height="wrap_content"
		android:id="@+id/linearLayout2" android:layout_width="match_parent">
		<TextView android:layout_height="wrap_content" android:text="Continente:"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewLabelContinente" android:layout_width="130dip"
			android:gravity="right" android:layout_marginRight="10dip"></TextView>
		<TextView android:layout_height="wrap_content"
			android:layout_width="wrap_content" android:text="CONTINENTE"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewContinente"></TextView>
	</LinearLayout>
	<LinearLayout android:layout_height="wrap_content"
		android:id="@+id/linearLayout2" android:layout_width="match_parent">
		<TextView android:layout_height="wrap_content" android:text="Moneta:"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewLabelMoneta" android:layout_width="130dip"
			android:gravity="right" android:layout_marginRight="10dip"></TextView>
		<TextView android:layout_height="wrap_content"
			android:layout_width="wrap_content" android:text="MONETA"
			android:textAppearance="?android:attr/textAppearanceMedium"
			android:id="@+id/textViewMoneta"></TextView>
	</LinearLayout>
 
</LinearLayout>

 

E infine nella activity si agganciano i dati al layout con un SimpleAdapter

        ListAdapter adapter = new SimpleAdapter(
        		this,
        		dati,
        		R.layout.main,
        		new String[]{"paese","superficie","popolazione",
        				"continente","moneta"},
        		new int[]{R.id.textViewPaese,R.id.textViewSuperficie,
        				R.id.textViewPopolazione,R.id.textViewContinente, 
        				R.id.textViewMoneta}
        );
 
        setListAdapter(adapter);




AttachmentSize
HelloSimpleAdapter2.zip47.79 KB