¿Alguien tiene código de muestra para validar el texto ingresado por el usuario en las preferencias? Por ejemplo, tengo una EditTextPreference para que el usuario ingrese una dirección de correo electrónico. Me gustaría validar el formato de la dirección de correo electrónico ingresada y mostrar un cuadro de diálogo de alerta si el formato no es correcto. Alguien tiene un código de muestra para esto? Gracias¿Cómo se valida el formato y los valores de EditTextPreference ingresados en Android 2.1?
Respuesta
Implementar Preference.OnPreferenceChangeListener
onPreferenceChange boolean (preferencia Preferencia, objeto newValue)
llama cuando una preferencia se ha cambiado por el usuario. Esto se invoca antes de que el estado de la Preferencia esté a punto de actualizarse y antes de que el estado persista.
Devuelve verdadero para actualizar el estado de la preferencia con el nuevo valor.
Para que pueda devolver directamente el resultado de la validación del valor.
public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
findPreference("mail_preference_key").setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return Pattern.matches("mailPattern", (String) newValue);
}
});
}
}
que haría uso de Preference.OnPreferenceChangeListener
en lugar de SharedPreferences.OnSharedPreferenceChangeListener
.
El primero le permite validar el nuevo valor antes de que persista (y evitar que persista) en lugar de hacerlo después.
Tu pregunta fue un golpe temprano de Google cuando estaba tratando de hacer lo mismo, así que con suerte esto ayuda a alguien. Aquí hay algo que he pirateado juntos hoy que demuestra OnPreferenceChangeListener, lo que le permite detener cambios no válidos.
en su fragmento:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Your_Pref = (EditTextPreference) getPreferenceScreen().findPreference("Your_Pref");
Your_Pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Boolean rtnval = true;
if (Your_Test) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Invalid Input");
builder.setMessage("Something's gone wrong...");
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
rtnval = false;
}
return rtnval;
}
});
}
- 1. UITextFields en UITableView, los valores ingresados reaparecen en otras celdas
- 2. Cómo configuro los valores predeterminados (Idioma y teclado) para un AVD de Android (SDK 2.1 y 2.2)
- 3. ¿El navegador Android 2.1 admite HTML 5 y qué formato de video reproduce?
- 4. Kendo DatePicker no valida el formato de fecha personalizado
- 5. setInputType en EditTextPreference
- 6. ¿Cómo evito que FormView elimine los valores ingresados del usuario después de que se haya activado el método de inserción?
- 7. Android 2.1: Cifrado Bluetooth
- 8. Android Pass Bitmap to Native en 2.1 y más bajo
- 9. getExternalFilesDir alternativo en Android 2.1
- 10. Android 2.1 vs 2.2
- 11. ¿Cómo generar dinámicamente el cuadro de texto y recopilar los datos ingresados por el usuario?
- 12. Impedir autofill de cuadro de texto con valores previamente ingresados
- 13. ¿Cómo se valida el estado interno de un objeto?
- 14. Uso de getRotationMatrix y getOrientation en Android 2.1
- 15. Hacer Bluetooth en Android 2.1 detectable indefinidamente
- 16. Diferencias de SQLite entre Android 2.1 y 2.2
- 17. Nexus One: lanzamiento de Android 2.1, ¿DÓNDE está el SDK para 2.1?
- 18. ¿En qué formato se almacenan los contactos en android?
- 19. Android: ¿cómo almacenar los valores variables en el registro?
- 20. EditTextPreference y la posición predeterminada del cursor
- 21. Camera.Parameters.FLASH_MODE_TORCH reemplazo para Android 2.1
- 22. Posible autocompletar una EditTextPreference?
- 23. Hacer que PostgreSQL respete el orden de los parámetros ingresados?
- 24. ¿Databind y valida un TableViewer?
- 25. console.log no funciona en el emulador de Android 2.1
- 26. iPhone y Core Data: ¿cómo retener los datos ingresados por el usuario entre actualizaciones?
- 27. PopupMenu en Android 2.1 API 7
- 28. pizca Desactivar/zoom en el navegador Android 2.1 en los dispositivos HTC
- 29. ¿Cómo se pueden imprimir los valores de punto flotante sin formato de mantisa/exponente?
- 30. ¿se reproduce el archivo en formato M4V en android?
tengo el siguiente código: \t \t si (key.equals ("update_delay")) { \t \t \t cadena nuevovalor = sp.getString (clave, null) ; .. \t \t \t si (Integer.parseInt (nuevovalor) <60) \t \t \t \t sp.edit() putString ("update_delay", "60") cometer(); } y la próxima vez que haga clic en EditTextPreference todavía muestra el valor bajo. ¿Sabes si commit() no funciona en este contexto? – sargas
No estoy seguro, pero en el método de compromiso la referencia dice 1. Tenga en cuenta que cuando dos editores modifican las preferencias al mismo tiempo, gana el último al que se llama a commit. 2. Devuelve verdadero si los nuevos valores se escribieron correctamente en el almacenamiento persistente. Punto 1: Tal vez el editor de usuario haga la última llamada. Punto 2: Compruebe si la confirmación es verdadera. Espero que esta ayuda. – Fede
¿No se llama después de que se realiza el cambio? Supongo que Aaron tiene la respuesta correcta. – iozee