Hace unas semanas una conversación en Twitter con @aeliasnet me sirvió para darme cuenta lo que había cambiado mi forma de programar Android. Llevo ya unos cuantos meses (desde el taller de @jbeerdev) intentando plasmar las enseñanzas del libro Clean Code del “tito Bob”.
Una de las cosas que estoy haciendo para mantener mi código limpio es crear mis propios objetos View reutilizables y delegar en ellos la lógica que les afecta. De esta forma, entre otras cosas, consigo tener unas clases Activity mucho más claras.
Veamos un ejemplo: imaginemos que tengo que mostrar la nota de un alumno con los siguientes datos: nombre del alumno, asignatura, nota numérica y nota en texto. Además si es un suspenso la nota debe estar en rojo.
Antes me crearía un layout con todos los datos y en mi Activity, a base de findById() rellenaría los campos con los datos correspondientes. Mi activity también contendría la lógica necesaria para el cambio de colores.
Ahora lo que hago es crearme un “compound view” que incrusto directamente donde corresponda en mi layout xml (como si fuera un objeto View más) y desde mi Activity le cargo los datos usando los métodos setter que he creado como interface.
Veamos como se haría este ejemplo paso a paso…
Primero lo que debemos crear es un clase que extienda de View (o de una de sus hijas) y colocarle la lógica necesaria. Yo en mi caso creo una que extiende de RelativeLayout. Mantengo los constructores del padre para asegurarme que funcionará en todos los supuestos.
Aunque el diseño y los objetos View hijos podría haberlos creado con código, para este caso he preferido diseñarlo vía xml e inflar este layout desde mi clase.
Ya está todo listo, lo único que nos falta es usarlo dentro de nuestras Activity. Para ello primero deberemos maquetarlo dentro de nuestros layout, para ello deberemos usar el nombre completo de la clase (con el paquete y todo):
Y en nuestra Activity usaremos findViewById para localizarlo y asignarle datos:
El código completo de este ejemplo lo tenéis en el repositorio GitHub: