Los Fragments

Con la popularización de las tabletas surgió el problema de desarrollar simultáneamente una aplicación para ser ejecutada tanto en un móvil como en una tableta. En otros sistemas, como iOS, se decidió que el desarrollador tenía que implementar dos aplicaciones diferentes. Android siguió con la estrategia de usar recursos alternativos para adaptarse a los diferentes tamaños de pantalla. Las herramientas vistas hasta ahora no resultan suficientes: cuando se diseña una interfaz de usuario específica para una tableta, no solo es preciso adaptar el tamaño de letra o los márgenes, sino que también es necesario reestructurar cómo se muestra la información en pantalla. En una tableta pueden caber muchos elementos de diseño al mismo tiempo, mientras que en un móvil estamos más limitados. Por ejemplo, podríamos diseñar dos elementos de la interfaz de usuario: uno que nos permitiera elegir entre una lista de lugares y otro que mostrara los detalles de uno de esos lugares. En una tableta se podrían mostrar ambos elementos a la vez, mientras que en un móvil tendríamos que mostrar primero uno y luego el otro.

video[Tutorial] Los Fragments en Android.

Para resolver este problema, en la versión 3.0 de Android se introdujeron los fragments. Los fragments son bloques de interfaz de usuario que pueden utilizarse en diferentes sitios, simplificando así la composición de una interfaz de usuario. Los fragments nos permiten diseñar y crear cada uno de los elementos de nuestra aplicación por separado. Luego, dependiendo del tamaño de pantalla disponible, mostraremos uno solo o más de uno a la vez.

Figura 1. Uso de fragmentsen tableta y móvil.

Es importante resaltar que no cambia el papel de las actividades. Sigue siendo el elemento básico que representa cada pantalla de una aplicación y nos permite navegar por ella. La novedad introducida es que cuando diseñemos una actividad, esta puede estar formada por uno o más fragments.

Cuando diseñemos un fragment, este ha degestionarse a sí mismo, recibiendo eventos de entrada y modificando su vista sin necesidad de que la actividad que lo contiene intervenga. De esta forma, el fragment se podrá utilizar en diferentes actividades sin tener que modificar el código.

fragments. El problema es que esta característica aparece en una versión que todavía no está disponible en muchos dispositivos. Para resolver este problema se ha creado una librería de compatibilidad para poder utilizar fragments en versiones anteriores a la 3.0. Esta librería se incluye de manera automática a un proyecto, siempre que el requerimiento mínimo de SDK sea inferior al nivel 11 (3.0); pero lo desarrollemos con una versión superior a la 3.0 (Target SDK). Para verificar esto, abre el proyecto creado en el ejercicio anterior. Observa cómo esta librería se incluye en libs/android-support-v4.jar.

 Cada fragment ha de implementarse en una clase diferente. Esta clase tiene una estructura similar a la de una actividad, pero con algunas diferencias. La primera es que esta clase tiene que extender Fragment. El ciclo de vida es muy parecido al de una actividad; sin embargo, dispone de unos cuantos eventos más, que le indican cambios en su estado con respecto a la actividad que lo contiene. El ciclo de vida de un fragment va asociado al de la actividad que lo contiene (por ejemplo, si la actividad es destruida, todos los fragments que contiene son destruidos); pero también es posible destruir un fragment sin modificar el estado de la actividad.

Los fragments suelen mostrar una vista (aunque esto no es imprescindible). Es recomendable definir esta vista en un fichero XML de recursos. Por lo tanto, para crear un fragment usaremos una clase Java para definir su comportamiento y un fichero XML para definir su apariencia.

Los fragments se pueden introducir en una actividad de dos formas diferentes: por código o desde XML. Ambas formas tienen sus ventajas y sus inconvenientes. Introducir un fragment desde XML es más sencillo. Además, el diseño queda diferenciado del código, simplificando el trabajo del diseñador. Sin embargo, trabajar de esta forma tiene un inconveniente: una vez introducido ya no podremos reemplazar el fragment por otro. Por lo tanto, un fragment añadido desde XML será siempre estático. Si lo añadimos desde código, ganamos la posibilidad de intercambiar el fragment por otro. En los siguientes ejercicios veremos cómo añadir fragments desde XML.