El siguiente es un tutorial acerca de cómo hacer vistas programáticas. Esto significa cómo crear vistas desde el JAVA. Generalmente la interfaz se crea desde el xml, pero cuando se está en proyectos más complejos tal vez se requiera hacerlo de esta forma. Por favor no se confundan con hacer listas, para eso Android ya tiene elementos optimizados, si están buscando eso por favor vean este gist.

Introducción

La serie de tutoriales consta de 4 vídeos, donde en el primero se crea una vista instanciandola como objeto en la Activity, en el segundo utilizamos herencia para crear una vista personalizada basada en una que ya está proporcionada por Android, en el tercero aprendemos a utilizar las vistas que creamos en Java en el xml, en el último aprendemos a hacer que una clase infle un layout de xml para usar esa clase como puente entre las interacciones del usuario y la data que obtenemos de la interfaz.

En general hay que tener super claro 1 concepto: todas las vistas son clases de Java. En el 1er vídeo hay una demostración de eso, lo que hace el xml es acceder a esas clases, si ustedes hace ctr+click o cmd+click en una vista en el xml los va a llevar a la clase de Java que se está usando.

Una cosa interesante es que la lógica de generar trozos de vistas reutilizables no es algo de otro mundo, al contrario, es un patrón DRY (don’t repeat yourself) que se utiliza en cualquier desarrollo. Sucede que en Android se vuelve un poco más escurridizo ponerlo en práctica por la separación entre xml y Java. Si has trabajado en desarrollo web esto no debería de ser nuevo para ti, en WordPress esto se hace comúnmente con get template part, por mi parte creo que es más fácil entenderlo bajo la lógica de partials de rails, en donde un archivo representa una vista parcial reutilizable dentro del modelo-vista-controlador (queda dentro de la V de view).

Formularios Dinámicos

Un requerimiento común en empresas es que se generen formularios dinámicos para poder ingresar datos en distintos procesos. Lo que hay que hacer en ese caso es hacer un request http tipo GET que tenga como respuesta los campos que se van a generar dinámicamente y luego con lo que vas a aprender acá generar la vista. Luego cuando el usuario aprieta el botón guardar (o puede ser que guardemos en onPause) se envía la data, via POST/PUT. En el vídeo 4 aprendemos a hacer que la lógica para obtener la respuesta del usuario quede encapsulada en la clase que se encarga de la vista.

Acá hay una reflexión que tomar en cuenta, cuando hagamos esto estaremos tentados a utilizar muchos fragments. Eso no me parece una buena idea sin antes evaluar la situación. Añadir indeterminada cantidad de fragmentos es abusar de la memoria disponible, poner un fragment en el stack es una operación más pesada que generar la vista dinámicamente. Otra cosa a considerar es que los fragment participan del ciclo de vida de la Activity, por ello sólo los necesitamos si es que requerimos algo así, como por ejemplo un campo del formulario que tome una foto, de lo contrario es matar una mosca con un cañón. Lo que necesitamos es un objeto que represente un campo y que al consultarlo nos pueda entregar la data de vuelta.

Si estás haciendo formularios dinámicos después de que veas estos tutoriales te podría interesar esta librería para generar stepper forms. Que son cuestionarios pasos a paso siguiendo los nuevos lineamientos de material design. La librería usa intensivamente vistas generadas en Java.

GitHub

Acá está el link al proyecto en GitHub para que puedas revisar el código

Vídeos