Archived post from my old blog (2007–2016), restored from the Wayback Machine. It is published as written at the time, in Italian; tools and versions are likely out of date.
Android Fragments e onClick
Belli i fragment, però più li uso e più mi danno l’impressione di essere stati implementati un po’ mentula canis
In particolare mi sono scontrato col problema che se si lega un listener per il click via xml in un fragment, il bind viene fatto in realtà con l’activity, rendendo il fragment quasi inutile di per sé
Le alternative sono due: fare il bind dell’onClickListener programmaticamente per ogni elemento nell’onCreateView oppure create il metodo necessario nell’activity e proxarlo al fragment.
Mi rendo conto che può sembrare scomodo, ma io ho optato per la seconda opzione, che mi sembra più mantenibile ed elegante
Nella fattispecie dato che l’azione nel mio caso parte da una ActionBar ho creato una interfaccia comune per i fragment che crea i metodi di callback
Alla creazione dei tab nell’actionBar (nel create della Activity principale) ho associato un tag ad ogni Tab, che ho fatto corrispondere al tag del fragment principale
Al trigger del callback su clik nella Activity il metodo controlla quale sia il tab attivo, ne ricava il tag e usando quello recupera il fragment attivo usando il tag e facendone un cast a ICustomFragmentCallback
A quel punto richiamo lo stesso metodo (implementato grazie all’interfaccia) nel fragment passando la view in firma e facendo a quel punto tutto quello che è necessario fare
Mi rendo conto che è un po’ un accrocchio, ma stipare tutta la logica nella Activity mi pare peggio e fare bind dei Listener programmaticamente è una cosa che sinceramente odio, anche se in questo caso potrebbe essere una soluzione valida.
Certo che se quelli di Google sta cosa l’avessero creata meglio non ci sarebbe stato sto problema
← Archive