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
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);
}
});
}
}
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.
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;
}
});
}
- 1. Format pakietu BLE w systemie Android
- 2. Korzystanie z uprawnień, których Android 2.1 nie zna (w systemie Android 2.1)
- 3. W jaki sposób można dodać niestandardowy format daty Drupal?
- 4. Drawable.setColorFilter() nie działa na systemie Android 2.1
- 5. W jaki sposób są określane wartości identyfikatorów zasobów w systemie Android?
- 6. W jaki sposób adnotacja @Index działa w JPA 2.1?
- 7. Jak porównać datę systemu z mydate w systemie Android 2.1?
- 8. Jak można sprawdzić format pola e-mail w ActiveRecord?
- 9. Format niestandardowego atrybutu "atrybut odwołania" w systemie Android?
- 10. Jak mogę sprawdzić, czy istnieją dodatki Intent w systemie Android?
- 11. W jaki sposób getExternalCacheDir() działa na systemie Android?
- 12. W jaki sposób można ustawić komunikat błędu dla urządzenia Spinner w systemie Android?
- 13. W jaki sposób struktura edytora GWT 2.1 obsługuje typy podstawowe?
- 14. Jak sprawdzić, czy sdcard jest zamontowany w systemie Android?
- 15. W jaki sposób qDebug() wyświetla wartości wyliczone?
- 16. jaki sposób można uzyskać różne wartości w COALESCE()
- 17. Wiedząc, czy ładowanie dźwięku za pomocą SoundPool odniosło sukces w systemie Android 1.6/2.0/2.1
- 18. W jaki sposób Android oblicza pamięć podręczną i rozmiar danych?
- 19. Czy można połączyć EditTextPreference z CheckBoxPreference?
- 20. W jaki sposób można uruchomić obrazy emulatora systemu Android VS?
- 21. Jaki jest odpowiednik ActionSheetIOS w systemie Android?
- 22. Wartości rejestrowania zmiennych w natywnym systemie Android
- 23. Jak programowo sprawdzić stan połączenia urządzenia Bluetooth w systemie Android?
- 24. Czy można ukryć widok w systemie Android?
- 25. Jak sprawdzić, ile aplikacji działa w tle w systemie Android?
- 26. jak przekonwertować milisekundy na format daty w systemie Android?
- 27. Przetwarzanie lokalnego pliku XML w systemie Android
- 28. W jaki sposób można sprawdzić poprawność typów PropTes zagnieżdżonego obiektu w ReactJS?
- 29. W jaki sposób można rozszerzyć wiersze?
- 30. W jaki sposób są generowane numery i węzłów w tmpfs?
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
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
Czy to nie jest wywoływane po zmianie? Przypuszczam, że @Aaron ma właściwą odpowiedź. – iozee