2010-03-29 10 views
13

Czy ktoś ma przykładowy kod do sprawdzenia poprawności wprowadzonego przez użytkownika tekstu w preferencjach? Na przykład mam EditTextPreference dla użytkownika, aby wprowadzić adres e-mail. Chciałbym zweryfikować format wprowadzonego adresu e-mail i wyświetlić okno dialogowe alertu, jeśli format jest nieprawidłowy. Czy ktoś ma jakiś przykładowy kod? DziękiW jaki sposób można sprawdzić format i wartości EditTextPreference wprowadzone w systemie Android 2.1?

Odpowiedz

10

Wdrożenie Preference.OnPreferenceChangeListener

logiczna onPreferenceChange (preferencje preferencji, Object nowaWartość)

Wywoływana gdy Pierwszeństwo zostało zmienione przez użytkownika. Jest to wywoływane, zanim stan preferencji zostanie zaktualizowany i zanim stan zostanie utrzymany.

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

Dzięki temu można bezpośrednio zwrócić wynik sprawdzania wartości.

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

Mam następujący kod: \t \t if (key.equals ("update_delay")) { \t \t \t String nowaWartość = sp.getString (klucz, null) ; ,. \t \t \t if (Integer.parseInt (nowa_wartość) <60) \t \t \t \t sp.edit() putString ("update_delay", "60") zobowiązują(); } i następnym razem, gdy kliknę na EditTextPreference, nadal będzie wyświetlana niska wartość. Czy wiesz, czy commit() nie działa w tym kontekście? – sargas

+0

Nie jestem pewien, ale w odwołaniu do metody zatwierdzania mówi 1. Zwróć uwagę, że gdy dwaj redaktorzy modyfikują preferencje w tym samym czasie, ostatni, który wywoła zatwierdzenie, wygrywa. 2. Zwraca wartość true, jeśli nowe wartości zostały pomyślnie zapisane w pamięci trwałej. Punkt 1: Może edytor użytkownika wykonuje ostatnie połączenie. Punkt 2: Sprawdź, czy commit zwraca true. Mam nadzieję, że ta pomoc. – Fede

+1

Czy to nie jest wywoływane po zmianie? Przypuszczam, że @Aaron ma właściwą odpowiedź. – iozee

2

użyję Preference.OnPreferenceChangeListener zamiast SharedPreferences.OnSharedPreferenceChangeListener.

Pierwsza z nich umożliwia sprawdzenie nowej wartości przed jej utrwaleniem (i uniknięciem jej) zamiast późniejszej.

9

Twoje pytanie było wczesnym hitem google, gdy próbowałem zrobić to samo, więc mam nadzieję, że to pomoże komuś. Oto coś, co zhakowałem dzisiaj, demonstrując OnPreferenceChangeListener, co pozwala ci zatrzymać nieprawidłowe zmiany.

w swoim fragmencie:

@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; 
      } 
     }); 
    } 
Powiązane problemy