10. Introduce en el atributo onClick del botón con id boton0 el valor “sePulsa0”. De esta manera, cuando se pulse sobre el botón se ejecutará el método sePulsa0(). Según la jerga de Java, diremos que este método es un escuchador del evento click que puede generar el objeto boton0.
11. Añade el siguiente método al final de la clase MasVistasActivity.
Lo que hace es asignar como textos de entrada el resultado de concatenar al texto de entrada el carácter “0”.
12. Añade al botón con texto “0” el atributo tag = “0”.
13. Modifica el método sePulsa0() de la siguiente forma:
El resultado obtenido es equivalente al anterior. En algunos casos será interesante utilizar un mismo método como escuchador de eventos de varias vistas. Podrás averiguar la vista que causó el evento, dado que esta se pasa como parámetro del método. En el ejemplo sabemos que en el atributo tag guardamos el carácter a insertar. El atributo tag puede ser usado libremente por el programador para almacenar un objeto de la clase Object 13(en la práctica podemos usar cualquier tipo de clase, dado que Object es la clase raíz de la que heredan todas las clases en Java). En nuestro caso hemos almacenado un objeto String, por lo que necesitamos una conversión de tipo 13. NOTA: Utiliza esta forma de trabajar en la práctica para no tener que crear un método onClick para cada botón de la calculadora.
14. Modifica el código de sePulsa() con el siguiente código:
15. En este código el valor de entrada es convertido en Float, multiplicado por dos y convertido en String para ser asignado a salida.
16. Ejecuta el proyecto y verifica el resultado.
2.10. Uso de tabs (pestañas)
Los tabs nos van a permitir crear una interfaz de usuario basada en pestañas, donde, de una forma muy intuitiva, podemos ofrecer al usuario diferentes vistas, que son seleccionadas al pulsar una de las pestañas que se muestran en la parte superior:
Para crear en XML una interfaz de usuario con pestañas, es necesario utilizar las etiquetas FragmentTabHost y TabWidget. FragmentTabHost debe ser el nodo raíz para el diseño, que contendrá tanto el TabWidget para la visualización de las pestañas como un FrameLayout para mostrar el contenido. A continuación se muestra el esquema a utilizar:
NOTA: en las primeras versiones de Android se usaba TabHost en lugar de FragmentTabHost. A partir del nivel de API 13, TabHost ha sido declarado obsoleto. Google ha reorientado su jerarquía de clases para introducir el concepto de fragments. No obstante, puedes seguir utilizando TabHost sin ningún problema.
NOTA: hasta la versión 3.0 (API 11) no aparece FragmentTabHost. Entonces, no podría usarse en niveles de API anteriores. Para resolver este problema, y más generalmente para poder usar fragments en versiones anteriores a la 3.0, Google ha creado la librería de compatibilidad 14(android.support). Se añade por defecto al crear un nuevo proyecto. Por lo tanto, podemos usar fragments y clases relacionadas desde cualquier versión.
NOTA: el siguiente vídeo utiliza TabHost en lugar FragmentTabHost. No obstante, los conceptos que se explican siguen siendo válidos.
 |
Vídeo[tutorial]: La vista TabHost en Android |
 |
Ejercicio: Uso de FragmentTabHost |
1.Crea un nuevo proyecto y llámalo Tabs.
2.Reemplaza el código de activity_main.xml por el siguiente:
La primera cosa extraña de este código es el nombre de la primera etiqueta. En lugar de indicar simplemente FragmentTabHost, se ha indicado el nombre completo de dominio. Como estudiaremos en el capítulo 4, cada vez que usemos una vista que no sea del sistema (por ejemplo, creada por nosotros o creada en una librería como en este caso) tendremos que indicar la clase donde se crea con su nombre completamente cualificado. Es decir, el nombre de la clase precedida de su paquete.
Como puedes observar, un FragmentTabHost es el nodo raíz del diseño, que contiene dos elementos combinados por medio de un LinearLayout. El primero es un TabWidget para la visualización de las pestañas y el segundo es un FrameLayout para mostrar el contenido asociado de cada lengüeta. En número de lengüetas y su contenido se indicará por código.
3.Abre el fichero MainActivity.java y reemplaza el código por el siguiente:
Observa como la clase creada extiende de FragmentActivity en lugar de Activity. Esto permitirá que la actividad trabaje con fragments; en concreto, vamos a crear un fragment para cada lengüeta. Se han añadido varias líneas en el método onCreate(). Empezamos inicializando la variable tabHost, luego se utiliza el método setup() para configurarla. Para ello indicamos el contexto, manejador de fragments y donde se mostrarán los fragments.
Cada una de las siguientes tres líneas introduce una nueva lengüeta usando el método addTab(). Se indican tres parámetros: un objeto TabSpec, una clase con el fragment a visualizar en la lengüeta y un Bundle por si queremos pasar información a la lengüeta. El método newTabSpec() crea una nueva lengüeta en un TabHost. Se le pasa como parámetro un String, que se utiliza como identificador y devuelve el objeto de tipo TabSpec creado.
Nota sobre Java: dado que el método newTabSpec() devuelve un objeto de tipo TabSpec, tras la llamada podemos llamar al método setIndicator(), que nos permitirá introducir un descriptor en la pestaña recién creada.
NOTA: también podremos asignar iconos a las lengüetas con el método setIndicator(). En el capítulo siguiente se estudiarán los iconos disponibles en el sistema y cómo crear nuevos icono. En las últimas versiones de Android solo podemos visualizar un texto o un icono. Para ver el icono introduce un texto vacío.
Читать дальше