Want to create interactive content? It’s easy in Genially!
MOB _ Android _ 04y05. Navegación y KVS
Valentina Aragona
Created on June 27, 2023
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Practical Presentation
View
Smart Presentation
View
Essential Presentation
View
Akihabara Presentation
View
Pastel Color Presentation
View
Modern Presentation
View
Relaxing Presentation
Transcript
Navegación y KVS
Navegación y KVS
Objetivos de Aprendizaje
- Comprender las herramientas de navegación que presenta Android y sus diferencias entre sí.
- Implementar la navegación entre vistas junto con la transferencia de datos.
Índice
2. Versiones del sistema operativo
3. Recursos útiles
1. ¿Qué es Android?
5. Creación de un proyecto en Android Studio
4. Android Studio
6. Estructura de un proyecto
7. Gradle
8. Emulador y SDK
9. SDK Manager
INTRODUCCIÓN
En Android existen distintas formas de navegar entre Activities y Fragments, y de comunicarlas entre sí. Aquí se presentarán tres distintas alternativas para ello, haciendo énfasis en la primera (Intent) y dejando la profundización de las otras dos en manos del lector.
- Un "Intent" es una descripción de una operación por realizar, es decir, que será la herramienta a partir de la cual le comunicaremos al sistema operativo que queremos realizar
FRAGMENTS
ACTIVITIES
+ Intent
Intent
- Navegación hacia Activity.
Suponiendo que necesitamos navegar hacia una Activity llamada SettingsActivity, el código será el siguiente:
Para poder transferir información de una Activity a otra, podemos hacer uso del método putExtra del mismo Intent. En él, asociamos un valor a una clave (key) para recuperarla en la Activity destino a partir de dicho parámetro. Cabe aclarar que no será posible transferir cualquier tipo de dato y que los tipos de datos estarán limitados a los que putExtra acepte. No obstante, también existe la posibilidad de hacer uso de clases propias, solo si estas implementan a Parcelable o Serializable.
- En el ejemplo de abajo, se hará uso del Intent anterior y se agregarán dos parámetros por transferir: un entero id y un string email. Nota la utilización de la Scope Function apply:
- Se recomienda utilizar constantes para suplantar a las keys; de esta manera, se evitan posibles errores innecesarios. Para recibir los Extra deseados, debemos crear el siguiente código en el destino:
Pila de Activities (stack)
A la hora de navegar dentro de una aplicación, las Activities se irán llamando unas a otras y apilándose (stack). De esta manera, si el usuario presiona el botón «Atrás» del dispositivo, la Activity que se encuentre por encima de la pila se eliminará y quedará visible aquella que se encontraba inmediatamente por detrás. Como se ilustra en la imagen debajo, el usuario se encuentra utilizando la Activity A y, mediante la interacción con el dispositivo, ejecuta la Activity B, la cual se apila frente a la Activity anterior. Si el usuario presiona el botón «Atrás», la Activity B se destruye y queda visible la Activity A.
Sin embargo, dicho comportamiento puede modificarse agregando algunas banderas al Intent que se creó para empezar una nueva Activity. Estas banderas son las siguientes:
Flagactivity new task
Flagactivity clear top
Flag activity single top
Por ejemplo, si quisiéramos agregar una de estas banderas al ejemplo anterior, el resultado sería el siguiente:
Todos los proyectos de Android deben tener un archivo AndroidManifest. Allí, figuran el nombre del paquete de la aplicación, permisos (de lectura de archivos, de acceso a Internet, etc.), componentes de la aplicación (Activities, Services y proveedores de contenido), entre otros. Es decir, que para nuestro propósito de crear una Activity nueva, aún nos está faltando declararla en el Manifest. Si observamos el archivo creado por defecto, podemos ver que MainActivity ya ha sido declarada con la particularidad de que posee un <intent-filter>. Este filtro está indicando que MainActivity sea la primera Activity en ejecutarse cuando se abra la aplicación. Continuemos con nuestro objetivo de iniciar una nueva Activity (SettingsActivity): la declararemos en el Manifest, como se puede ver en la imagen a continuación. Observa que, además de declarar el nombre de la clase, también estamos definiendo la orientación de la pantalla.
Actividad de repaso
¡click aquí!
Resoluciones
¡click AQUÍ!
Pueden ver la resolución propuesta como ejemplo en el archivo mvvm/app/src/main/java/com/example/app/ui/login/LoginActivity.kt
Administrador de Fragments (FragmentManager)
A partir de la herramienta Intent, podemos desplazarnos entre Activities y desde Fragments hacia una Activity, pero no desde una Activity hacia un Fragment ni entre Fragments. Para ello, utilizaremos el FragmentManager,
Si quisiéramos crear un Fragment dentro de nuestra Activity, debemos, en primer lugar, definir dónde va a vivir. Podría ocupar toda la pantalla o solo una sección. Para hacerlo, creamos dentro del layout de la Activity una vista del tipo FragmentContainerView con las dimensiones deseadas y le asignamos un ID, por ejemplo, fragment_container. Dentro de la Activity en cuestión, llamamos en el onCreate al supportFragmentManager y hacemos un reemplazo de la vista por el Fragment que queremos mostrar (ExampleFragment).
En caso de que necesitemos recuperar la instancia creada de ExampleFragment, podemos recurrir al supportFragmentManager de la siguiente forma:
Dentro del Fragment creado, podemos, también, navegar hacia otros Fragments o dividir el mismo para que otros Fragments vivan dentro de él. La sintaxis del código será la misma; lo único que cambiará será la forma de acceder al FragmentManager. En el siguiente gráfico, podemos ver qué FragmentManager corresponde a cada instancia:
Al igual que en el caso del Intent, podemos configurar el stack o pila para que satisfaga las necesidades de la app. A diferencia del Intent, no existen banderas (Flags) para configurar dicho comportamiento. Sin embargo, deberán usarse distintos métodos: por ejemplo, en el caso anterior, se utilizó replace, que permite reemplazar el Fragment actual por uno nuevo, pero existen otros métodos como add, que agrega una nueva vista al stack. A partir de la combinación de estos métodos, se logrará la navegación de nuestra aplicación. Para poder transferir datos de un Fragment a otro, utilizaremos el campo arguments. A este atributo se le debe “setear” un Bundle junto con las variables y claves que se necesiten enviar. Si tratamos de transferir las variables id y mail, como se realizó en el ejemplo anterior, el código quedaría del siguiente modo:
Para poder obtener las variables en el Fragment receptor, debemos acceder a arguments y, a partir de la clave/key, recuperar los valores deseados. Nota que getInt y getString poseen un segundo parámetro (opcional) donde se indica el valor por defecto que se va a obtener en caso de no encontrar la variable asociada a la clave provista.
Navigation Architecture Component
Android Jetpack presenta un conjunto de librerías y herramientas de distinta índole para el desarrollo de la tecnología. Entre ellas, se encuentra la dependencia de navegación, Navigation Architecture Component (NAC), que presenta un nuevo concepto para trasladarse entre Fragments. Al igual que en el caso anterior, FragmentManager, el NAC debe “vivir” dentro de un FragmentContainerView. A este se lo denominará “huésped de navegación” o “Navigation Host”, y es en donde se reemplazarán las vistas que conforman la aplicación. En el ejemplo que se muestra debajo, se han agregado los campos name, defaultNavHost y navGraph. El Navigation Graph (navGraph) o gráfico de navegación es el lugar donde se indican las conexiones entre Fragments y la forma en que se deben vincular. A diferencia de otro tipo de librerías, el NAC posee una interfaz visual y su equivalente en XML para trazar la navegación deseada.
En el ejemplo de abajo, se busca navegar entre MainFragment y OtherFragment. La unión entre dichos Fragments estará dada por la flecha que se puede observar, que representa un action. Como su nombre lo indica, un action es la acción de navegar de una vista a otra. El código XML adjunto es autogenerado por la interfaz gráfica.
Para poder ejecutar la action creada, debemos acceder al Navigation Controller (es el equivalente al Fragment Manager) y asignar dentro de este la transición deseada. De esta manera, completamos el primer cambio dentro del flujo de la aplicación.
Para transferir datos de una vista a otra, se deberá crear un Bundle y acceder a ellos vía arguments de forma similar que en el caso del FragmentManager.
KVS
Objetivos
- Reconocer almacenamiento y lectura de valores dentro del dispositivo;
- Comprender las diferencias entre getsharedpreferences y getpreferences.
SharedPreferences
Las API de SharedPreferences permiten almacenar dentro de un dispositivo pares clave-valor; es decir, que, a pesar de que la aplicación se haya cerrado, dichos valores podrán ser recuperados nuevamente.
Para crear un nuevo archivo de preferencias compartidas o acceder a uno ya existente, se pueden usar dos métodos distintos:
Para acceder a un SharedPreferences, se necesita una clave que lo identificará y será necesaria a la hora de recuperar su valor. Una forma sencilla de hacerlo es agregar como clave el applicationId de la aplicación. A continuación, se muestra un ejemplo de cómo acceder a un SharedPreferences:
Edición
Para poder editar un SharedPreferences, se deberá acceder al método edit y luego, mediante las funciones putInt, putBoolean, entre otras, almacenar el par clave-valor. Para finalizar dicha operación, se deberá utilizar el método apply o commit. Ambas funciones son iguales, solo que la última retorna un Boolean indicando si los valores fueron guardados satisfactoriamente.
Lectura
Para leer valores que se encuentran almacenados, se debe realizar el mismo proceso, cambiando la función put por get. Es importante destacar que los métodos get permiten un valor por defecto en caso de que no encuentren el par clave-valor deseado.
Actividad de repaso
¡click aquí!
Resoluciones
¡click AQUÍ!
Pueden ver la resolución propuesta como ejemplo en los archivos mvvm/app/src/main/java/com/example/app/ui/splash/SplashActivity.kt y mvvm/app/src/main/java/com/example/app/ui/login/LoginActivity.kt
¡Llegaste al final de este tema!
¡Nos vemos en la próxima!