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

  1. Iniciar la transacción
  2. Agregar, eliminar  o reemplazar el fragmento deseado
  3. 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

Aplicaciones móviles - Actividades y fragmentos

By Johnattan Jaramillo

Aplicaciones móviles - Actividades y fragmentos

Curso Desarrollo de aplicaciones para dispositivos móviles

  • 1,306