2013-03-24 16 views
10

Sto utilizzando Edittextpreference come una delle preferenze nella sezione delle impostazioni. Voglio convalidare questo edittextpreference quando l'utente inserisce i dati in esso e fa clic su OK; prima di salvarlo in sharedpreference.Android EditText convalida delle preferenze

Sto provando a fare qualcosa del genere ma questo prima salva la preferenza.

editTextPreference 
      .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
       @Override 
       public boolean onPreferenceChange(Preference preference, 
         Object newValue) { 
        if (((newValue.toString().length() == 15) { 
          // save preference only if length is equal to 15 
        } 
       }) 
       }); 

qualcuno può mi guida come convalidare edittextpreference prima che venga salvato in sharedpreference in modo che io posso decidere se voglio salvarlo o meno.

risposta

21

Secondo doc here

Chiamato quando una preferenza è stato modificato dall'utente. Questo è chiamato prima che lo stato della preferenza sta per essere aggiornato e prima dello lo stato è persistente.

E restituisce True per aggiornare lo stato della preferenza con il nuovo valore .

modo da poter fare le seguenti

 editTextPreference 
      .setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
       @Override 
       public boolean onPreferenceChange(Preference preference, 
         Object newValue) { 
        if (((newValue.toString().length() == 15) { 
          // 
          return true; 
        } 
        else{ 
          // invalid you can show invalid message 
          return false; 
        } 
       }) 
     }); 
+0

Così sto loading preferenze da XML attraverso addPreferencesFromResource (R.xml.settings); e implementando SharedPreferences.OnSharedPreferenceChangeListener e Preference.OnPreferenceChangeListener in PreferenceFragment invece di impostarlo su EditTextPreference come descritto. Il listener onPreferenceChange non viene mai chiamato. Solo la funzione onSharedPreferenceChanged. Perché pensi? – marienke

+0

http://stackoverflow.com/a/41446046/956975 <- potrebbe avere qualcosa a che fare con esso (differenza tra SharedPreferences e Preferences). – marienke