Desarrollo de aplicaciones para dispositivos móviles Android
Actividades y fragmentos
Johnattan Jaramillo G.
jjaramillo238@misena.edu.co
Contenido del curso
1- Introducción
2- Layouts y widgets
3- Actividades y fragmentos
4- Almacenamiento local
5- Almacenamiento remoto
6- Material design
7- Publicación y marketing de apps
ACTIVIDADES Y FRAGMENTOS
- Actividades
- Servicios
- Intents
- Fragmentos
- Menú
- Ejercicio
Actividades
Una actividad representa una pantalla simple con la cuál puede interactuar un usuario en la app
Definición
Actividades
Una actividad es una clase .java que extiende a la clase Activity
Codificación
Actividades
Las actividades en el sistema son administradas como pilas de actividades
Administración
Actividad en primer plano (ejecución actual)
Actividad en segundo plano (ejecución anterior)
Actividades
Estados
Paused State
Foreground State
Background State
Destroyed State
- La actividad está ubicada en primer plano (primera posición de la pila)
- Su estado es activa (en ejecución)
- La actividad ha perdido su foco, pero permanece visible
- Su estado es pausada, sin embargo su información permanece completamente disponible
- La actividad ha sido completamente cubierta por otra, está oculta
- Su estado es detenida, sin embargo su información permanece completamente disponible
- La actividad no existe
- Si la actividad se encuentra pausada o detenida, el sistema la puede destruir para liberar memoria
Actividades
Ciclo de vida
Actividades
Ciclo de vida - Métodos
Se ejecuta cuando | Usos | Secuencia | |
---|---|---|---|
onCreate() |
La actividad es creada por primera vez | -Crear vistas -Enlazar datos a listas |
Seguirá con onStart() |
onStart() |
La actividad es visible al usuario |
-Seguirá con onResume() si está en primer plano -Seguirá con onStop() si está oculta |
|
onResume() | La actividad está en primer plano | -Interactuar con el usuario | Seguirá con onPause() |
onRestart() | La actividad será reiniciada tras ser detenida previamente | Seguirá con onStart() |
Actividades
Ciclo de vida - Métodos
Se ejecuta cuando | Usos | Secuencia | |
---|---|---|---|
onPause() |
La actividad es se reanudará posteriormente |
-No recibe entradas de usuario -No puede ejecutar códigos |
-Seguirá con onResume() si continúa en primer plano -Seguirá con onStop() si continúa oculta |
onStop() |
La actividad no es visible al usuario |
-Otra actividad ha sido iniciada -Otra actividad se ha puesto en primer plano -Otra actividad se ha destruido |
-Seguirá con onRestart() si volverá al primer plano -Seguirá con onDestroy() si se destruirá |
Actividades
Ciclo de vida - Métodos
Se ejecuta cuando | Usos | Secuencia | |
---|---|---|---|
onDestroy() |
Se recibe la llamada antes de que la actividad sea destruida |
-La actividad es finalizada cuando es llamado el método finish() -El sistema está destruyendo temporalmente la instancia de la actividad para ahorrar espacio en memoria |
Actividades
Ciclo de vida - Métodos
Ciclo de vida de las actividades
Eventos
- Sistema
- Usuario
Administra
Servicios
Un servicio es un componente que realiza operaciones en segundo plano sin una interfaz de usuario
Definición
Servicios
Realizar operaciones únicas como
- Descargar archivos
- Enviar y recibir notificaciones
Usos
Servicios
Iniciado
(Started)
Formas
- Cuando un componente de aplicación (como una actividad) lo inicia llamando startService())
- Una vez iniciado se ejecuta indefinidamente hasta que termine la operación o sea destruido por el componente
Enlazado
(Bound)
- Cuando un componente de aplicación (como una actividad) lo enlaza llamando bindService())
- Permite a los componentes interactuar con los servicios (envío de peticiones, obtención de resultados, comunicación entre procesos IPC)
Servicios
Ciclo de vida
Servicios
Ciclo de vida - Métodos
Se ejecuta cuando | Usos | Secuencia | |
---|---|---|---|
onStartCommand() |
Un componente solicita que el servicio sea iniciado a través de startService() |
Iniciar un servicio que se ejecuta en segundo plano indefinidamente | Se debe detener a través de una llamada a stopSelf() o stopService() |
onBind() |
Otro componente quiere enlazarse al servicio bindService() |
Se debe suministrar una interface que permita al cliente comunicarse con el servicio | Cuando los todos los componentes de desenlazan del servicio este se destruye |
onCreate() |
El servicio es creado por primera vez |
Desarrollar procedimientos de instalación una sola vez | Se ejecuta antes de onStartCommand() y/o onBind() |
onDestroy() |
El servicio será destruido |
Liberar recursos como threads, registros, receptores | Es la última llamada que el servicio recibe |
Intents
Un intent es un objeto de acción que se usa para solicitar acciones a otros componentes (actividades, servicios, content providers, etc) de la app
Definición
Intents
- Los intents proporcionan una manera para comunicar los diferentes componentes de la app
- Los intents tienen información que el S.O. Androd usa para determinar qué componente debe iniciar
- Los componentes pueden encontrarse dentro de la misma app o en otras apps externas
- Si múltiples apps son capaces de responder a un mensaje, entonces Android proporciona una lista de apps (chooser) para escoger la adecuada
Características
Intents
Usos
Actividades
Servicios
Broadcast receivers
Intent
Actividades
Servicios
Broadcast receivers
Intents
- Iniciar una actividad
- intent.startActivity(): Intent describe la actividad que se debe iniciar y contiene los datos necesarios para ello
- Iniciar un servicio
- intent.startService(): Intent describe el servicio que se debe iniciar y contiene los datos necesarios para ello
- Entregar un mensaje a otras apps
- intent.sendBroadcast()
- intent.sendOrderedBroadcast()
- intent.sentStickyBroadcast()
Usos
Intents
- Ejemplos:
- Iniciar una actividad nueva en respuesta a una acción del usuario
- Iniciar un servicio para descargar un archivo en segundo plano
Tipos - Intent explícito
Intents
- Especifica que componente se debe iniciar mediante su nombre. Normalmente los componentes pertenecen a la misma aplicación
Tipos - Intent explícito
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
Intents
- No especifica el nombre del componente se debe iniciar
- La información debe ser suficiente para que el sistema determine cuál de los componentes de otras aplicaciones es el mejor para el intent.
Tipos - Intent implícito
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://javapoint.com"));
startActivity(intent);
Intents
- Ejemplo:
- Mostrar al usuario ubicación en un mapa requiere solicitar otra aplicación que sea capaz de mostrar una ubicación específica en un mapa
Tipos - Intent implícito
El S.O. Android busca en todas las apps un filtro de intents que coincida con el intent
Intents
- Los filtros de intents son declarados en el archivo manifest.xml y especifican los tipos de intents que el componente podría recibir
- Si el intent coincide con uno de los filtros de intents, el sistema inicia el componente y le entrega el objeto intent
- Si los filtros de intents son compatibles, el sistema muestra un cuadro de diálogo para que el usuario pueda elegir la aplicación a usar
- Las aplicaciones seguras usan intents explícitos para iniciar actividades y servicios
Filtros de intents
Intents
Nombre del componente
Filtros - Información principal
El nombre del componente que se debe iniciar
Iniciar componente específico definido por el desarrollador
El sistema decide qué componente debe recibir el intent conforme a la información que contiene
Intent explícito
Intent implícito
Intents
Acciones
Filtros - Información principal
Especifica la acción genérica que se debe realizar (como ver o elegir)
Información que la actividad puede mostrar al usuario (fotos, mapas, etc)
Información que el usuario puede compartir mediante otra app (correo electrónico, social)
ACTION_VIEW
ACTION_SEND
startActivity()
Intents
Datos
Filtros - Información principal
Especifica la acción genérica que se debe realizar (como ver o elegir)
Referencia a los datos
<scheme>://<host>:<port>/<path>
http://midominio:8080/abc
Tipos de datos
Imágenes, videos, texto plano
URI
MIME
setData()
setData()
Referencia a los datos acompañados con su tipo
URI MIME
setDataAndType()
Intents
Extras
Filtros - Información principal
Pares de valores clave que tienen información adicional necesaria para lograr la acción solicitada
Campos extra
Clave
Valor
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, "jjaramillo238@misena.edu.co");
Intents
Indicadores
Filtros - Información principal
Funcionan como metadatos para el intent
Ejemplos
Como iniciar una actividad (indica a que thread pertenecerá)
Como tratar la actividad después del inicio (indicar si pertenece a lista de actividades pendientes)
Fragmentos
Representan un comportamiento o una parte de la interfaz de usuario en una actividad
Definición
Fragmentos
Podemos pensar en los fragmentos como componentes de interfaz de usuario reultilizables, usados para:
Usos
Construir interfaces de usuario flexibles para diferentes tipos de pantalla
Crear pestañas (tabs)
Fragmentos
Podemos pensar en los fragmentos como componentes de interfaz de usuario reultilizables, usados para:
Usos
Crear cuadros de diálogo y ventanas emergentes (popups)
Personalizar barras de acción (actionbars)
Fragmentos
- Se pueden combinar múltiples fragmentos en una sola actividad para crear una UI multipanel
- Se puede reutilizar un fragmentos en diferentes actividades
- Se pueden manipular en tiempo de ejecución
- Modulares (subactividades)
- Manejan ciclo de vida propio
- Manejan eventos propios
Características
Fragmentos
Administra las transacciones entre fragmentos. Cada actividad tiene su propio administrador de fragmentos
Java (Recomendado)
Administrador de fragmentos
Administran cambios en la UI -agregar, reemplazar, eliminar fragmentos
Transacciones de fragmentos
getFragmentManager() ->Referencia a todos los fragmentos de la actividad
findFragmentById() ->Referencia un fragmento en específico de la actividad
Fragmentos
Java (Recomendado)
Pasos para administrar las transacciones de fragmentos
- Iniciar la transacción
- Agregar, eliminar o reemplazar el fragmento deseado
- Ejecutar la transacción
Fragmentos
Java (Recomendado)
1- Crear una clase que extienda de fragment
public class MiFragmento extends Fragment
2- Crear un layout separado u objeto java que contenga la vista
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="demo.sena.com.fragmentapp.MiFragmento"
android:id="@+id/fragmento1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/saludo" />
</FrameLayout>
Fragmentos
Java (Recomendado)
3- Usar el método onCreateView() para enlazar la vista al layout
public class MiFragmento extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance){
return inflater.inflate(R.layout.fragmento1, container, false);
}
}
4- Incluir el fragmento dentro de la actividad usando Java
MiFragmento frag = new MiFragmento();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.fragmento1,frag,"etiqueta_fragmento");
transaction.commit();
Fragmentos
XML
1- Crear una clase que extienda de fragment
public class MiFragmento extends Fragment
2- Crear un layout separado u objeto java que contenga la vista
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="demo.sena.com.fragmentapp.MiFragmento"
android:id="@+id/fragmento1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/saludo" />
</FrameLayout>
Fragmentos
XML
3- Usar el método onCreateView() para enlazar la vista al layout
public class MiFragmento extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance){
return inflater.inflate(R.layout.fragmento1, container, false);
}
}
4- Incluir el fragmento dentro de la actividad usando XML
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="demo.sena.com.fragmentapp.MiFragmento"
android:id="@+id/fragmento1" />
Menú
Es una manera eficiente y amigable para presentar múltiples opciones, de las cuales el usuario puede seleccionar la que quiera
Definición
Context
Options
Popup
Menú
PASO1: Definir un menú en XML
Creación
Crear un archivo XML dentro del directorio del proyecto res/menu y construir el menú con los siguientes elementos
<menu>
<item>
Define un menú
Actúa como un elemento raíz que puede contener uno o más elementos <item> y <group>
Define un ítem de menú
Representa una opción simple del menú y puede contener a su vez un menú para crear un submenú
Menú
Menú para un videojuego
Ejemplo - Menú
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/nueva_partida"
android:icon="@drawable/ic_nueva_partida"
android:title="@string/nueva_partida"
android:showAsAction="ifRoom"/>
<item android:id="@+id/ayuda"
android:icon="@drawable/ic_ayuda"
android:title="@string/ayuda"/>
</menu>
Menú
Menú para archivos
Ejemplo - Submenú
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/archivo"
android:title="@string/archivo"
<menu>
<item android:id="@+id/crear_nuevo"
android:title="@string/crear_nuevo"/>
<item android:id="@+id/abrir"
android:title="@string/abrir"/>
</menu>
</item>
</menu>
Menú
Para usar el menú en tu actividad, se necesita inflar el menu resource. Inflar el banco de recursos de menú significa convertir el recurso XML en un objeto programable usando MenuInflater.inflate()
Ejemplo - Usar menú en actividad
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
Definir acción para el click del menú
public boolean onOptionsItemSelected(MenuItem item){
return super.onOptionsItemSelected(item);
}
Menú
OptionMenu
Tipos
- Es la colección primaria de elementos de menú para una actividad
- Donde se ubican acciones de impacto global para la aplicación como buscar, redactar, configuraciones
ContextMenu
PopupMenu
- Aparece cuando el usuario hace click sostenido sobre un elemento de menú
- Muestra los elementos de un menú debajo o encima del texto al cuál se encuentra anclado
Copy of Aplicaciones móviles - Actividades y fragmentos
By juan david ramirez londoño
Copy of Aplicaciones móviles - Actividades y fragmentos
Curso Desarrollo de aplicaciones para dispositivos móviles
- 403