9 - Notificaciones sencillas mediante la clase Toast

Android permite mostrar una ventana emergente temporal que informa al usuario mediante un mensaje que aparece en la pantalla por un lapso pequeño de tiempo (luego de pasado un tiempo la ventana desaparece).

Esta ventana que se superpone a la interfaz que se está mostrando en ese momento se administra mediante una clase llamada Toast.

Crear un proyecto llamado Proyecto008.

Problema:

Generar un número aleatorio entre 1 y 100000. Mostrar mediante una ventana emergente dicho número por un lapso de tiempo. Luego mediante un control EditText ("Number") pedir al operador que ingrese el número que vio en la pantalla. Cuando se presione un botón controlar el número generado aleatoriamente con el que ingresó el usuario y mediante otro Toast informar si acertó o no.

Lo primero que hacemos es crear la interfaz siguiente:

Clase Toast

Es decir que disponemos un TextView, un EditText ("Number") y un Button. Fijamos como id los valores "tv1", "et1" y "boton1". Recordemos que en la ventana "Component Tree" tenemos la referencia de todos los objetos que contiene nuestra interfaz.

Si queremos que en la vista "blueprint" se muestren todos los enlaces de los controles debemos seleccionar la opción "Show all Constraints" (Por defecto no viene activa):

Clase Toast

Código fuente:

package com.tutorialesprogramacionya.proyecto008

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val et1=findViewById<EditText>(R.id.et1)
        val numero = (Math.random() * 100_001).toInt()
        Toast.makeText(this, "Número a recordar: ${numero}", Toast.LENGTH_LONG).show()
        val boton1=findViewById<Button>(R.id.button)
        boton1.setOnClickListener {
            if (numero == et1.text.toString().toInt())
                Toast.makeText(this, "Muy bien recordaste el número mostrado.", Toast.LENGTH_LONG).show()
            else
                Toast.makeText(this, "Lo siento pero no es el número que mostré.", Toast.LENGTH_LONG).show()
        }
    }
}

Analicemos el código fuente de la aplicación, lo primero que hacemos es generar un valor aleatorio comprendido entre 0 y 100000:

        val numero = (Math.random() * 100_001).toInt()

Mostramos mediante la clase Toast un mensaje con el número aleatorio generado:

        Toast.makeText(this, "Número a recordar: ${numero}", Toast.LENGTH_LONG).show()

Fijamos la lambda que captura el clic del botón donde verificamos si el valor aleatorio generado coincide con el valor que carga el operador en el EditText:

        boton1.setOnClickListener {
            if (numero == et1.text.toString().toInt())
                Toast.makeText(this, "Muy bien recordaste el número mostrado.", Toast.LENGTH_LONG).show()
            else
                Toast.makeText(this, "Lo siento pero no es el número que mostré.", Toast.LENGTH_LONG).show()
        }

Veamos ahora lo nuevo que es la clase Toast, tenemos que crear un objeto de la clase Toast, para ello llamamos el método estático makeText de la clase Toast. A partir del objeto devuelto llamamos al método show.

El método makeText tiene tres parámetros: el primero hace referencia a la ventana o Activity donde aparece (this), el segundo es un String que se mostrará en pantalla y por último es una constante que indica que la notificación se mostrará por un tiempo largo o corto:

        Toast.makeText(this, "Número a recordar: ${numero}", Toast.LENGTH_LONG).show()

Esto hace que inmediatamente arranquemos la aplicación se mostrará la notificación con el número que deberá memorizar el usuario:

Clase Toast

Luego de unos segundos desaparece la notificación de pantalla (es decir en nuestro programa desaparece de pantalla el número aleatorio)

Cuando el operador termina de cargar el número y procede a presionar el botón "controlar" se ejecuta el código que dispusimos en la lambda:

        boton1.setOnClickListener {
            if (numero == et1.text.toString().toInt())
                Toast.makeText(this, "Muy bien recordaste el número mostrado.", Toast.LENGTH_LONG).show()
            else
                Toast.makeText(this, "Lo siento pero no es el número que mostré.", Toast.LENGTH_LONG).show()
        }

En este método extraemos del control EditText el número que ingreso el usuario:

            if (numero == et1.text.toString().toInt())

Y mediante un if verificamos si coincide con el número aleatorio ingresado por el operador, si coincide inmediatamente creamos una nueva notificación y procedemos a mostrar que acertó:

            if (numero == et1.text.toString().toInt())
                Toast.makeText(this, "Muy bien recordaste el número mostrado.", Toast.LENGTH_LONG).show()

Por el falso mediante otra notificación mostramos que no ingresó correctamente el número:

            else
                Toast.makeText(this, "Lo siento pero no es el número que mostré.", Toast.LENGTH_LONG).show()

Si queremos que aparezca de nuevo un número aleatorio debemos cerrar el programa y volverlo a ejecutar.

Este proyecto lo puede descargar en un zip desde este enlace: proyecto008.zip