Pubblicato il 7 aprile 2013 da frabbe
ListView: footer fisso e sempre visibile

Recentemente mi sono scontrato con un problema apparentemente banale nell’utilizzo delle ListView: mantenere un elemento, una sorta di footer, sempre visibile ed allineato nella parte bassa della finestra facendo in modo che la ListView non si sovrapponesse al footer ne venisse nascosta dietro di esso.
La prima strada possibile, standard ma che raggiunge solo in parte il risultato, è sfruttare il metodo addFooterView
dell’oggetto ListView come illustrato qui; si crea un file di layout apposito per il footer e lo si associa alla ListView con il codice seguente:
View footerView = ((LayoutInflater) ActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false); ListView.addFooterView(footerView); |
Questa modalità presenta purtroppo due svantaggi:
- Il footer verrà accodato alla ListView come suo ultimo elemento; non sarà dunque sempre visibile ma qualora la lista dovesse occupare più di una schermata il footer verrà visualizzato solo scorrendo la lista fino alla fine.
- L’associazione del footer alla ListView deve avvenire prima del collegamento con l’adapter altrimenti verrà ignorata; questo rende impossibile gestire la visualizzazione condizionale del footer a runtime, per ad esempio nasconderlo in determinate circostanze.
Ho quindi cercato una via alternativa per raggiungere il risultato, individuandola in questa risposta su StackOverflow. Come tutte le soluzioni geniali è semplicissima: non richiede nessuna operazione dal punto di vista del codice ma semplicemente, nel file di layout associato all’activity o al fragment che conterrà la ListView, si utilizza un XML simile al seguente:
<RelativeLayout> <Button android:id="@+id/footer" android:layout_alignParentBottom="true" /> <ListView android:id="@android:id/list" android:layout_above="@id/footer" /> </RelativeLayout> |
Il footer in questo caso è costituito da un semplice elemento Button ma è possibile utilizzare al suo posto elementi più complessi o addirittura anche un elemento Layout, l’importante è gli sia associato un ID e che si imposti l’attributo
android:layout_alignParentBottom="true"
L’altro elemento chiave è assegnare alla ListView l’attributo
android:layout_above="@id/footer"
in cui naturalmente va indicato l’ID corretto assegnato al footer.
Questo è tutto!
Lascia un commento
0 Commenti
Lascia un commento a questo articolo!