2016-06-14 2 views
-1

Si nous avons plusieurs préférences comme checkbox, edittext, préférences de listes, comment définirOnPreferenceClickListener sur ces éléments à la fois au lieu de définir l'écouteur sur chaque préférence. Je dois prendre en charge les derniers périphériques (> 4.0). Disons: Si nous avons 10 préférences sous une catégorie différente et si nous avons besoin de définir l'écouteur sur tout cela, je ne veux pas trouver toutes les préférences séparément et écrire le code pour cela. Utilisez des boucles pour obtenir toutes les préférences à la fois. Est-il possible d'écrire un seul écouteur et d'utiliser un commutateur?setOnPreferenceClickListener sur plusieurs préférences

Répondre

0

Eh bien, si vous utilisez le style de préférence à l'ancienne (vous utilisez addPreferencesFromResource()), vous pouvez remplacer la fonction onPreferenceTreeClick(). Si vous utilisez des préférences basées sur des fragments modernes, vous devez remplacer onPreferenceStartFragment(). Je n'ai pas encore testé cette solution, mais d'après la documentation, c'est ce que vous cherchez.

Les deux fonctions passent comme argument Préférence objet, où vous pouvez trouver la clé de préférence ... La première option a fonctionné pour moi, et oui, je suis un peu démodé guy.

EDIT

Lorsque vous utilisez une activité à base de fragments: Vous ne devez pas définir cliquez auditeur sur chaque élément. Remplacez simplement onPreferenceTreeClick() dans la classe PreferenceFragment. Voici un exemple.

public static class GeneralPreferenceFragment extends PreferenceFragment { 
    @Override 
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 
     switch (preference.getKey()){ 
       case "key_1": 
        //Do your stuff 
        break; 
     } 
     return super.onPreferenceTreeClick(preferenceScreen, preference); 
    } 
} 
+0

Merci! @ user1557434 J'utilise la préférence par fragment. Ou existe-t-il un autre moyen de définir setOnPreferenceClickListener sur les préférences? – akm

+0

J'ai mis à jour ma réponse. – user1557434