1. Inicio
  2. Documentos
  3. JavierBuildForm [Android]
  4. Actualizar Librería
  5. Nuevo input – variación

Nuevo input – variación

Para el caso que sea una variación, por ejemplo tipo TEXT ahora necesitamos que acepte numero, tanto decimales como enteros.

En ConstantesFormInputType agregamos un nuevo tipo, para entero y double.

public class ConstantesFormInputType {
    public static final String  ID = "id";
    ...
    public static final String  NUMBER_INT = "number_int";
    public static final String  NUMBER_DOUBLE = "number_double";
    ...
    public static final String  SELECT_IMAGE = "select_image";
}

Agregamos en InputBaseFactory los métodos para cada uno

    public BuildInputForm mNumberInt(MetaField metaField) {
        return mBase(metaField,ConstantesFormInputType.NUMBER_INT);
    }

Luego en InputBaseFactory como es un nuevo tipo considerarlo en el Case del método getInputView, como en este caso vamos a reusar , regresamos el mismo Class del que reusaremos , que es del tipo TEXT

public Class getInputView(String formType){
        Class inputClass = null;
        switch (formType){
 ...
            case ConstantesFormInputType.TEXT:
            case ConstantesFormInputType.NUMBER_INT:
                inputClass = InputBaseFactory.viewInputClass;
                break;
...
            default:
                throw new RuntimeException("No se ha definido una clase para este tipo de formulario.");
        }
        return inputClass;
    }

Luego en class que seria InputText , modificar según corresponda el nuevo tipo, para este caso, debemos hacer que restrinja a numero enteros o reales, basta con modificar el método getInputType.

private int getInputType(MetaField metaField) {
        int inputTypeResult;
        switch (metaField.formType){
            case ConstantesFormInputType.TEXT:
                inputTypeResult = InputType.TYPE_CLASS_TEXT;
                break;
            ..
           case ConstantesFormInputType.NUMBER_INT:
                inputTypeResult = InputType.TYPE_CLASS_NUMBER;
                break;
            case ConstantesFormInputType.NUMBER_DOUBLE:
                inputTypeResult = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL;
                break;
            default:
                throw new RuntimeException("Su tipo no corresponde con este view.");
        }
        return inputTypeResult;
    }

Listo, para probarlo, agregamos al ejemplo basico en RegistroBasicoExample.java un campo edad.

@Override
    protected void makeForm() {
        
        inputBaseFactory.mText(RegistroModel_meta.name());

        inputBaseFactory.mNumberInt(RegistroModel_meta.age());

        inputBaseFactory.mText(RegistroModel_meta.lastname());
        inputBaseFactory.mEmail(RegistroModel_meta.email());
        inputBaseFactory.mPassword(RegistroModel_meta.password());
        inputBaseFactory.mTermConditions(RegistroModel_meta.accepTerms(),"http://www.google.com");
    }

Y al compilar se debe mostrar el campo edad con el teclado numérico.