Listado completo de tutoriales

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 superponer 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. Dejamos por defecto el nombre asignado al ID de botón, pero a los objetos TextView y EditText definimos su ID con los valor "et1" y "tv1". Recordemos que en la ventana "Component Tree" tenemos la referencia de todos los objetos que contiene nuestra interfaz.

Luego seleccionamos el botón de la interfaz visual e inicializamos la propiedad onClick con el nombre del método que se ejecutará al ser presionado, dicho nombre debe ser: "controlar" (recordemos que los nombre de métodos en Java por convención empiezan en minúsculas)

Código fuente:

package com.tutorialesprogramacionya.proyecto008;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private EditText et1;
    private int num;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et1=findViewById(R.id.et1);
        num=(int)(Math.random()*100001);
        String cadena=String.valueOf(num);
        Toast notificacion= Toast.makeText(this,cadena,Toast.LENGTH_LONG);
        notificacion.show();
    }

    public void controlar(View v) {
        String valorIngresado=et1.getText().toString();
        int valor=Integer.parseInt(valorIngresado);
        if (valor==num) {
            Toast notificacion=Toast.makeText(this,"Muy bien recordaste el número mostrado.",Toast.LENGTH_LONG);
            notificacion.show();
        }
        else {
            Toast notificacion=Toast.makeText(this,"Lo siento pero no es el número que mostré.", Toast.LENGTH_LONG);
            notificacion.show();
        }
    }
}

Analicemos el código fuente de la aplicación, lo primero es definir un objeto de la clase EditText y una variable entera donde almacenaremos el valor aleatorio que generamos y mostramos en un principio:

    private EditText et1;
    private int num;

En el método onCreate que es el primero que se ejecuta al inicializar la aplicación es donde inicializamos la referencia del EditText:

        et1=findViewById(R.id.et1);

Generamos un valor aleatorio comprendido entre 0 y 100000 y lo almacenamos en la variable num:

        num=(int)(Math.random()*100001);

Convertimos el valor entero a String ya que la clase Toast siempre hay que pasarte un String para mostrar:

        String cadena=String.valueOf(num);

Veamos ahora lo nuevo que es la clase Toast, tenemos que crear un objeto de la clase Toast, para ello definimos una variable que la llamamos notificacion y mediante el método estático makeText de la clase Toast creamos el objeto.

El método makeText tiene tres parámetros: el primero hace referencia a la ventana o Activity donde aparece (this), el segundo es la variable de tipo 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 notificacion=Toast.makeText(this,cadena,Toast.LENGTH_LONG);

Finalmente cuando queremos que se muestre la notificación en pantalla procedemos a llamar al método show de la clase Toast:

        notificacion.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 ejecutar el botón "controlar" se ejecuta el código que dispusimos en el método "controlar":

    public void controlar(View v) {
        String valorIngresado=et1.getText().toString();
        int valor=Integer.parseInt(valorIngresado);
        if (valor==num) {
            Toast notificacion=Toast.makeText(this,"Muy bien recordaste el número mostrado.",Toast.LENGTH_LONG);
            notificacion.show();
        }
        else {
            Toast notificacion=Toast.makeText(this,"Lo siento pero no es el número que mostré.",Toast.LENGTH_LONG);
            notificacion.show();
        }
    }

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

        String valorIngresado=et1.getText().toString();

Lo convertimos a entero:

        int valor=Integer.parseInt(valorIngresado);

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 (valor==num) {
            Toast notificacion=Toast.makeText(this,"Muy bien recordaste el número mostrado.",Toast.LENGTH_LONG);
            notificacion.show();
        }

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

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

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

Si queremos no tener que definir un objeto de la clase Toast, podemos simplificar el código:

        Toast.makeText(this,cadena,Toast.LENGTH_LONG).show();

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


Retornar