Saltar a contenido

Sistema de notificaciones en Android

Las notificaciones en Android permiten informar al usuario de eventos, acciones o resultados de forma no intrusiva. Pueden aparecer como mensajes breves dentro de la aplicación (Toasts o Snackbars) o como ventanas modales que requieren interacción (Diálogos).

Notificaciones Toast

Notificación Toast

Un Toast es un pequeño mensaje emergente que aparece temporalmente sobre la interfaz de usuario. Sirve para mostrar información breve relacionada con una acción del usuario o con el estado de la app.
Desaparece automáticamente después de un breve periodo de tiempo.

El método principal es Toast.makeText(), que recibe los siguientes parámetros:

  1. Contexto → normalmente la Activity actual (this o applicationContext).
  2. Texto → el mensaje que se mostrará al usuario.
  3. Duración → puede ser Toast.LENGTH_SHORT o Toast.LENGTH_LONG.

En Compose, los Toast se emplean desde un contexto obtenido con LocalContext:

@Composable
fun MostrarToastEjemplo() {
    val contexto = LocalContext.current

    Button(onClick = {
        Toast.makeText(contexto, "Mensaje desde Compose", Toast.LENGTH_SHORT).show()
    }) {
        Text("Mostrar Toast")
    }
}

Snackbar

Snackbar

La Snackbar es una notificación breve que aparece en la parte inferior de la pantalla. Proporciona información contextual o retroalimentación sobre una acción del usuario, sin interrumpir la experiencia.

Puede incluir un botón opcional de acción (por ejemplo, “Deshacer”).

Ejemplos de uso típicos: - Confirmación de acción (p. ej., “Correo eliminado” con opción “Deshacer”).
- Estado de red (“Sin conexión”).
- Confirmación de envío o guardado de datos (“Cambios guardados correctamente”).

A partir de Jetpack Compose, las Snackbars se gestionan dentro de un Scaffold, mediante SnackbarHost y SnackbarHostState.

Estas se muestran usando corrutinas y la función showSnackbar().

@Composable
fun EjemploSnackbar() {
    val snackbarHostState = remember { SnackbarHostState() }
    val scope = rememberCoroutineScope()

    Scaffold(
        snackbarHost = { SnackbarHost(hostState = snackbarHostState) }
    ) { padding ->
        Button(
            onClick = {
                scope.launch {
                    snackbarHostState.showSnackbar(
                        message = "Datos guardados correctamente",
                        actionLabel = "OK",
                        duration = SnackbarDuration.Short
                    )
                }
            },
            modifier = Modifier.padding(padding)
        ) {
            Text("Mostrar Snackbar")
        }
    }
}

Info

Las Snackbars son más recomendadas que los Toast para apps modernas, ya que respetan la arquitectura de Compose y se integran con el ciclo de vida del Scaffold.

Cuadro diálogo

Un diálogo es una ventana emergente que requiere interacción explícita del usuario, por ejemplo:

  • Confirmar o cancelar una acción.
  • Introducir información adicional.
  • Seleccionar una opción.

En Compose, los cuadros de diálogo se crean mediante el componente AlertDialog, totalmente declarativo:

@Composable
fun EjemploDialogo() {
    var mostrarDialogo by remember { mutableStateOf(false) }

    if (mostrarDialogo) {
        AlertDialog(
            onDismissRequest = { mostrarDialogo = false },
            confirmButton = {
                TextButton(onClick = { mostrarDialogo = false }) {
                    Text("Aceptar")
                }
            },
            dismissButton = {
                TextButton(onClick = { mostrarDialogo = false }) {
                    Text("Cancelar")
                }
            },
            title = { Text("Confirmación") },
            text = { Text("¿Deseas continuar con la acción?") }
        )
    }

    Button(onClick = { mostrarDialogo = true }) {
        Text("Mostrar diálogo")
    }
}

Actividades

  • AC 307 (RA2 / CE2a / IC1 / 3p). Sobre la AC 306, implementa una notificación Toast al hacer click sobre una tarea que diga "Tarea completada" y la elimine de la lista.

  • AC 308 (RA2 / CE2a / IC1 / 3p). Sobre la AC 306, implementa una notificación snackbar al hacer click sobre botón o tarea que diga "Eliminar tarea" y la elimine de la lista.

  • AC 309 (RA2 / CE2a / IC1 / 3p). Sobre la AC 306, implementa un cuadro de diálogo al hacer click sobre una tarea que diga "¿Eliminar tarea?" y la elimine de la lista si el usuario lo requiere.