2010-03-29 11 views
13

¿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

10

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); 
      } 

     }); 
    } 
} 
+0

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

+0

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

+1

¿No se llama después de que se realiza el cambio? Supongo que Aaron tiene la respuesta correcta. – iozee

2

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.

9

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; 
      } 
     }); 
    } 
Cuestiones relacionadas