2013-03-24 12 views
10

Ich benutze Edittextpreference als eine der Einstellungen im Einstellungsbereich. Ich möchte diese Edittext-Voreinstellung validieren, wenn der Benutzer Daten dorthin eingibt und auf OK klickt; bevor Sie es in der gemeinsamen Voreinstellung speichern.Android EditText Präferenzüberprüfung

Ich versuche, so etwas zu tun, aber das spart die Präferenz zuerst nehme ich an.

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

kann mir jemand führen, wie edittextpreference zu validieren, bevor es in sharedpreference gespeichert ist, so dass ich entscheiden kann, wenn ich es gespeichert werden soll oder nicht.

Antwort

21

Nach doc here

aufgerufen, wenn eine Präferenz vom Benutzer geändert wurde. Dies wird genannt, bevor der Status der Präferenz aktualisiert wird und vor der Status beibehalten wird.

Und es gibt True zurück, um den Zustand der Präferenz mit dem neuen Wert zu aktualisieren.

So können Sie die folgenden

 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

Also ich lade Präferenzen von xml durch addPreferencesFromResource (R.xml.settings); und Implementieren von SharedPreferences.OnSharedPreferenceChangeListener und Preference.OnPreferenceChangeListener im PreferenceFragment, anstatt es wie beschrieben in der EditTextPreference festzulegen. Der onPreferenceChange-Listener wird nie aufgerufen. Nur die onSharedPreferenceChanged-Funktion. Warum denken Sie? – marienke

+0

http://stackoverflow.com/a/41446046/956975 <- könnte etwas damit zu tun haben (Unterschied zwischen SharedPreferences und Preferences). – marienke