Quelqu'un a-t-il un exemple de code pour valider le texte saisi par l'utilisateur dans les préférences? Par exemple, j'ai un EditTextPreference pour l'utilisateur d'entrer une adresse email. Je souhaite valider le format de l'adresse e-mail saisie et afficher une boîte de dialogue d'alerte si le format n'est pas correct. Quelqu'un at-il un code d'échantillon pour cela? MerciComment validez-vous le format et les valeurs de EditTextPreference entré dans Android 2.1?
Répondre
Mettre en œuvre Preference.OnPreferenceChangeListener
onPreferenceChange booléenne (préférence de préférence, objet newValue)
Appelée lorsqu'un préférence a été modifiée par l'utilisateur. Ceci est appelé avant que l'état de la Préférence soit sur le point d'être mis à jour et avant que l'état ne soit persistant.
Renvoie True pour mettre à jour l'état de la préférence avec la nouvelle valeur.
Vous pouvez donc renvoyer directement le résultat de la validation de valeur.
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);
}
});
}
}
j'utiliser Preference.OnPreferenceChangeListener
plutôt que SharedPreferences.OnSharedPreferenceChangeListener
. Le premier permet de valider la nouvelle valeur avant qu'elle ne soit persistante (et d'empêcher sa persistance) plutôt qu'après.
Votre question a été un premier hit google lorsque j'essayais de faire la même chose, donc j'espère que cela aide quelqu'un. Voici quelque chose que j'ai piraté aujourd'hui qui démontre OnPreferenceChangeListener, vous permettant ainsi d'arrêter les modifications invalides.
dans votre fragment:
@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;
}
});
}
je le code suivant: \t \t si (key.equals ("update_delay")) { \t \t \t Chaîne newvalue = sp.getString (clé, null) ; .. \t \t \t if (Integer.parseInt (newvalue) <60) \t \t \t \t sp.edit() PutString ("update_delay", "60") commit(); } et la prochaine fois que je clique sur le EditTextPreference, il montre toujours la valeur basse. Savez-vous si commit() ne fonctionne pas dans ce contexte? – sargas
Je ne suis pas sûr, mais dans la référence de méthode de commit dit 1. Notez que lorsque deux éditeurs modifient des préférences en même temps, le dernier à appeler commit gagne. 2. Renvoie true si les nouvelles valeurs ont été écrites avec succès dans le stockage persistant. Point 1: Peut-être que l'éditeur de l'utilisateur passe le dernier appel. Point 2: Vérifier si la validation retourne vrai. Espérons que cette aide. – Fede
N'est-ce pas appelé après le changement est fait? Je suppose que @Aaron a la bonne réponse. – iozee