J'ai une préférence avec un tas de préférences (sous). Chacune (SUB) PréférencesCreen représente un compte et a le nom d'utilisateur de compte comme titre.
usernamePref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { accScreen.setTitle(newValue.toString()); return true; } });
8 Réponses :
expérimenter ce même problème, mais onContentChanged () ne fonctionne pas pour moi. Mon problème est avec les préférencesCreens plus d'un niveau profond de la racine.
Pour suivre votre exemple, si vous avez créé des préférences de "comptes", puis a ajouté chacun de vos préférences de votre compte individuel. Comme ceci: p> Si un utilisateur a modifié leur nom d'utilisateur et cliqué sur Enregistrer, appeler préfévereActivity.oncontenTchanged () semble affecter uniquement les descendants directs des préférences racines. Les titres et les résumés des écrans de troisième génération ne sont pas redessinés, reflétant toujours les valeurs anciennes. P> regardant par le code de oncontentChanged (), on dirait qu'il suffit de retirez () s l'écran racine à La liste de liste de liste de liste, bien que je ne pense pas que les préférences ultérieures soient toujours liées à une liste de liste (sont-elles?), nous ne pouvons donc renoncer manuellement rien ... P> Le seul échelonnage que je peux penser de créerait les sous-menus comme des préférées isolées au lieu de préférencesCreens, afin que nous puissions appeler intentionnellement onContentChanged () sur notre ancêtre direct. Mais c'est encore plus d'un kludge que la solution de contournement actuelle. Des idées? P> p>
Le travail autour que j'ai réussi à le faire fonctionner est de surcharger la méthode ONRESUME et de reconstruire l'interface utilisateur à l'intérieur.
Aioobe, pourriez-vous montrer un exemple de code sur la façon dont vous faites cela?
J'ai trouvé une solution à cela. J'ai une hiérarchie comme celle-ci, chacune d'entre elles est une préférenceCrean: Maintenant, lorsque les paramètres userx sont modifiés, j'ai défini les titres dans les utilisateursListscreen et après cet appel: p> qui met à jour l'interface utilisateur de la liste et les modifications sont visibles. P> P>
Wow, sonne comme la voie à suivre. Je n'ai pas l'Android SDK installé pour le moment, mais je vais prendre votre parole pour cela ça marche. Super!
Cela rétablira également toutes les modifications apportées à des préférences dans le fragment de préférence (par exemple, aux auditeurs) après appel! (ou dans d'autres changements de mots fabriqués à partir de l'appelant jusqu'à ce qu'il finira la vue de reconstruction sera perdu :))
Cela fonctionne pour moi, vous devez saisir la boîte de dialogue sous-jacente de vos préférencesCrean et définir le titre de là, vraiment facile.
Notez que cette méthode est maintenant obsolète: envisagez d'utiliser fragments qui semble résoudre beaucoup de problèmes avec des préférences personnalisées (je n'ai pas testé moi-même). Il y a un package de compatibilité pour l'ancien SDK. P> PréférencesActivitectivité # OnContentChanged () Code> Rafraîchra l'écran entier, survenant à un autre effet de scintillement em> fort>. Cependant, vous pouvez atteindre le même objectif sélectivement fort> sur une préférence donnée avec le
Préférences # onperencereClick (...) code> méthode. P>
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
Log.v(TAG, "onSharedPreferenceChanged(...," + key + ")");
if (key.equals("myPref")) {
onPreferenceTreeClick(getPreferenceScreen(), getPreferenceManager().findPreference("myPref"));
Log.v(TAG, "Do whatever else you need...");
}
//onContentChanged(); // this could be used but occurs screen flickering
}
Eh bien, devinez quoi ... ils ont laissé des préférences hors de la bibliothèque de support b> !! Ainsi, pour les niveaux d'API plus anciens, vous devez toujours aller avec la préférence :(
Je viens de mettre juste après la mise à jour du résumé de mon élément de préférence parent. P> P>
Il n'y a pas de gistroottadapter sur le support lib
notifydatasetchanged () strong> est la bonne solution. Mais je veux ajouter un itérateur récursif pour toutes les préférencesCreens, dans la mesure où j'ai eu un problème pour trouver un véritable parent d'une préférence. Pour une structure compliquée de préférences, je recommande ce codeur-Code: findPreference("KEY").setSummary(str);
updateAll_PrefereneScreens(getPreferenceScreen());
Cela pourrait être une réponse tardive mais toujours ... je suis sur elle en ce moment :)
La façon dont je l'ai atteint, est que vous pouvez accrocher à la Remarque: Dans cet exemple, je garde aussi une trace de l'index tel que spécifié dans la DOCS: P> OnResume P>
appelé lorsque le fragment est visible pour l'utilisateur et fonctionnant activement. Ceci est généralement lié à l'activité.Resume du cycle de vie de l'activité contenant. P>
blockQuote> est bon, c'est que cela fonctionne aussi bien sûr avec J'espère que cela aide, codage heureux ! :) p> p>