Crear extensiones para AppInventor (Crear un enum) 4

Podemos hacer que nuestros parámetros de función tengan un tipo personalizado de enum (así podremos ver una descripción de lo que pasamos y a la función le llega un entero que sera más sencillo de tratar que un String y el texto descriptivo del enum será mas sencillo de modificar.

Para este ejemplo tendremos dos ficheros:

https://github.com/pinguytaz/extAppInventor/blob/main/Ejemplos/src/losejemplos/helpers/TipoEnum.java

https://github.com/pinguytaz/extAppInventor/tree/main/Ejemplos/src/losejemplos/Enumerado.java

Para tener un menú desplegable de un enumerado lo realizaremos creando una clase TipoEnum que tendrá la definición, este fichero se generara en un directorio inferior llamado «helpers» que es donde tendremos todas nuestras clases auxiliares. Por este motivo nuestro ejemplo comenzara indicando que es un paquete de helpers

package losejemplos.helpers;

Esta enumeración especial sera una implementación de la interfaz «OptionList<T>«, en nuestro caso el tipo «T» sera Integer ya que retorna valores enteros»OptionList<Integer>» y ademas de la definición de los valores tendremos los metodos:

  • toUnderlyingValue() Que retorna el valor de tipo «T».
  • fromUnderlyingValue(T) que recoge el valor de tipo «T» y lo convierte a una instancia de la enumeración.

Quedando un código de la siguiente forma:

public enum TiposEnum implements OptionList<Integer> {
  UnValor(0),
  ElUno(1),
  UnDo(2),
  Varios(3);

  private int tipoEnum;     
  TiposEnum(int tipoEnum) {
    this.tipoEnum = tipoEnum;
  }
  public Integer toUnderlyingValue() {        
    return tipoEnum;
  }
  private static final Map<Integer, TiposEnum> lookup = new HashMap<>();
  static {
    for(TiposLog tipoEnum : TiposEnum.values()) {
      lookup.put(tipoEnum.toUnderlyingValue(), tipoEnum);
    }
  }
  public static TiposEnum fromUnderlyingValue(int tipoEnum) {   
    return lookup.get(tipoEnum);
  }
}

Ahora definiremos la función de nuestra extensión que llamaremos «LaFuncion» y que recibirá un tipo enum llamado «TipoEnum«, los nombres que se mostraran serán los definidos en nuestra enumeración.

El valor por defecto es el primer valor que definamos pero podríamos especificar otros si usamos la anotación @Default como podemos ver.

UnValor(0),
  ElUno(1),
@Default         En este caso el valor por defecto sera "UnDos"
  UnDo(2),
  Varios(3);

Si generamos una nueva versión y eliminamos un valor y queremos indicar que ya no se puede usar tendríamos que usar la anotación @Deprecated.

public String LaFuncion(@Options(TipoEnum.class) final int tipo) {  ...... }

Los desplegables que se especifican con la anotación @Options que es la que hemos utilizado se puede aplicar en el parámetros de la función y en el retorno, ademas se podrá utilizar en los parámetros de los eventos (que veremos más adelante) y en las propiedades, tanto al asignar como a recuperar valor.

Tenemos otra anotación que nos permite realizar un filtro por ejemplo de ficheros que utiliza la anotación @Asset que nos permite de forma activa realizar filtros de ficheros, en este caso solo se los parámetros de funciones y la asignación de propiedades son las que la pueden utilizar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Javier.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Hostinger.es que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad