2013-03-24 30 views
10

Używam Edittextpreference jako jedną z preferencji w sekcji ustawień. Chcę sprawdzić poprawność tego editekstu, gdy użytkownik wprowadzi do niego dane i kliknie przycisk OK; przed zapisaniem go we wspólnejpreferencji.Sprawdzanie poprawności Android EditText Preferencje

Próbuję zrobić coś takiego, ale to zapisuje preferencję, tak jak przypuszczam.

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

może ktoś mnie prowadził, jak potwierdzić edittextpreference zanim zostanie on zapisany w sharedpreference tak, że mogę zdecydować, czy chcę, aby go zapisać, czy nie.

Odpowiedz

21

Według doc here

wywoływana po Pierwszeństwo zostało zmienione przez użytkownika. Nazywa się to , zanim stan preferencji zostanie zaktualizowany, a przed stanem utrzyma się stan.

I zwraca wartość True, aby zaktualizować stan Preferencji o nową wartość .

Więc można wykonać następujące

 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

Więc jestem ładowanie preferencji z XML przez addPreferencesFromResource (R.xml.settings); i implementacja SharedPreferences.OnSharedPreferenceChangeListener i Preference.OnPreferenceChangeListener w PreferenceFragment zamiast ustawiania go w EditTextPreference w trakcie opisywania. Program nasłuchujący onPreferenceChange nigdy nie jest wywoływany. Tylko funkcja onSharedPreferenceChanged. Czemu myślisz? – marienke

+0

http://stackoverflow.com/a/41446046/956975 <- może mieć z tym coś wspólnego (różnica między SharedPreferences i Preferences). – marienke