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.
