Home / Programmazione / Java Android / Implementare BaseAdapter in Android
Mattepuffo

Implementare BaseAdapter in Android

Implementare BaseAdapter in Android

Oggi vediamo come implementare un proprio Adapter partendo da BaseAdapter in Android.

Ho dovuto seguire questa strada per avere un maggiore controllo nel caso di dati presi da XML; non ho avuto problemi del genere invece con JSON.

Ma poco male!

Non vedremo come interpretare i dati XML o come popolare la ListView, ma ci limiteremo a creare il nostro Adapter.

Questa la classe:

public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;

    public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data = d;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null) {
            vi = inflater.inflate(R.layout.list_layout, null);
        }
        TextView txtCodice = (TextView) vi.findViewById(R.id.txt_codice);
        TextView txtRagSoc = (TextView) vi.findViewById(R.id.txt_ragsoc);
        HashMap<String, String> cliente = new HashMap<String, String>();
        cliente = data.get(position);
        txtCodice.setText(cliente.get("CODICE"));
        txtRagSoc.setText(cliente.get("RAGSOC"));
        return vi;
    }

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }

}

Come vedete la classe estende BaseAdapter, che è la classe base per usare gli Adapter.

Al costruttore passiamo l'Activity di riferimento e la collezione di dati che dobbiamo poi visualizzare sulla app.

Poi facciamo l'Override di diversi metodi, di cui quello più importante è getView, che è quello che "lavora" sulla view della app.

Come esempio ho impostato il valore di due TextView; il layout di riferimento è questo:

<?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"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/txt_codice"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10sp"
        android:textIsSelectable="false" />

    <TextView
        android:id="@+id/txt_ragsoc"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10sp"
        android:textIsSelectable="false" />

</LinearLayout>

Per impostarlo come Adapter:

LazyAdapter adapter = new LazyAdapter(this, list);
ListView lv = getListView();
lv.setAdapter(adapter);

Prossimamente vedremo come impostare i filtri sul nostro Adapter!

Ciao!