Activité de préférence de Préférence Écouteur de clics
Je suis la construction d'une Activité de Préférence là où la plupart des préférences dans la liste sera à l'exécution de code et de ne pas modifier un SharedPreference directement. Mon preferences.xml fichier ressemble à ceci.
<PreferenceCategory
android:title="Connection" >
<Preference
android:id="@+id/settings_connectToNewComputer"
android:key="connectToNewComputer"
android:summary="Currently connected to:"
android:title="Connect to new computer" />
<Preference
android:id="@+id/removeDevice"
android:key="removeDevice"
android:summary="Remove this device from the computer's whitelist"
android:title="Remove this device from computer" />
</PreferenceCategory>
<PreferenceCategory
android:title="About" >
<Preference
android:id="@+id/settings_About"
android:key="about"
android:summary="About me and my thanks to those who made this app great"
android:title="About Hue Pro" />
<Preference
android:id="@+id/contact"
android:key="contact"
android:summary="Contact me with comments, bugs, and suggestions for updates"
android:title="Contact me" />
</PreferenceCategory>
Mon but est d'avoir un bloc de code à exécuter en cas de l'une de ces préférences sont cliqués. Similaire à la fonction "Effacer l'historique des recherches" dans les paramètres Google Play menu préférence. (http://i.imgur.com/qnHbJX9.png)
Personne ne sait comment rendre cela possible?
Je dois ajouter que j'ai essayé d'utiliser findPreference("KeyNameHere"), mais il renvoie toujours null.
Merci!
Edit:
J'ai ajouté ce code et mis en œuvre OnPreferenceClickListener:
@Override
public boolean onPreferenceClick(Preference preference) {
return false;
}
Mais cette méthode n'est jamais appelé. Est-il une autre façon de le faire?
Edit 2:
J'ai trouvé que si je sors de l'PreferenceCategory balises, donc je suis parti avec cette:
<Preference
android:id="@+id/settings_connectToNewComputer"
android:key="connectToNewComputer"
android:summary="Currently connected to:"
android:title="Connect to new computer" />
<Preference
android:id="@+id/removeDevice"
android:key="removeDevice"
android:summary="Remove this device from the computer's whitelist"
android:title="Remove this device from computer" />
<Preference
android:id="@+id/settings_About"
android:key="about"
android:summary="About me and my thanks to those who made this app great"
android:title="About Hue Pro" />
<Preference
android:id="@+id/contact"
android:key="contact"
android:summary="Contact me with comments, bugs, and suggestions for updates"
android:title="Contact me" />
et appeler cela:
getPreferenceScreen().setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
return false;
}
});
puis-je réellement obtenir une réponse à partir de l'événement de clic. Le seul inconvénient est que je dois supprimer la préférence de regroupement. Quelqu'un sait pourquoi il est et de tout moyen pour résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Mettre en œuvre
OnPreferenceClickListener
et dans leonPreferenceClick
Peut-être que cela pourrait ne pas être utile pour les OP, mais pourrait être utile pour quelqu'un d'autre.
Je voudrais écrire une sorte de résumé; en général, vous pouvez suivre essentiellement de trois façons:
1) vous pouvez trouver votre préférence quelque part dans votre code avec
et vous pouvez ensuite ajouter un écouteur de clics et de remplacer son sur la méthode de clic avec
Ce qui doit être fait pour tous les goûts, dont les clics que vous souhaitez écouter
2) Vous pouvez mettre en œuvre la Préférence.OnPreferenceClickListener interface dans vos paramètres fragment/d'activité et de remplacer onPreferenceClick juste une fois, à l'aide d'un commutateur de construire ou un if-else if-else if-... la construction et la fusion de tous les maniements; il doit être quelque chose comme:
Ensuite, il vous reste à trouver chaque préférence, mais vous pouvez simplement appeler chacun d'entre eux
(Je pense que l'OP de la mise en œuvre n'a pas fonctionné (sa méthode n'était pas appelé) à cause de cette dernière partie)
nous avons pass "ce" en tant que paramètre parce que nous avons mis en œuvre l'écouteur de clics interface
3) (qui je pense est le plus facile) vous pouvez remplacer
en fonction de vos préférences fragment/activité sans la mise en œuvre de toute autre interface et de là, vous pouvez copier le commutateur de l'if-else if-... construction de l'option 2); le principal avantage, c'est que vous ne devriez pas avoir besoin de trouver chaque préférence et de faire appel à eux setOnPreferenceClickListener.
Espère que ce sera utile pour quelqu'un!
De substituer:
Je suis venu avec mon propre (ce que je crois est vraiment foiré) solution, mais il fonctionne.
Donc ce que j'ai appris est qu'il existe un système hiérarchique qui fonctionne comme: PreferenceScreen a des enfants PreferenceCategory a des enfants de Préférence, comme vous pouvez le voir dans le fichier XML. Mon problème était que je ne pouvais pas régler les préférences " onClickListeners directement à partir de la PreferenceScreen. J'ai donc fait deux boucles for qui va descendre à chacune de ces Préférences et de définir un OnPreferenceClickListener pour chacune et chacun d'entre eux. Salissant, mais fonctionne enfin.
String
tableau de clés et ensuite obtenirPreference
de chacun et de définir laonPreferenceClick
. C'est un code de quelques lignes. Merci.Vous pouvez également trouver de la préférence et de l'ensemble de l'écouteur de clics.
Votre Préférence objet n'null si vous trouverez suivants
(copypasting du projet):
.....
.....
.....