J'ai une activité qui étend PreferenceActivity. Je charge les préférences à partir du fichier xml. Mais dans certains cas, je dois masquer complètement l'une des préférences de l'écran en fonction de l'état de mon application. Il existe une méthode setEnabled, mais ce n'est pas exactement ce que je veux. Je souhaite supprimer complètement cette préférence de l'écran. C'est possible ?
android
preferences
Alex Volovoy
la source
la source
setEnabled()
Si vous êtes
Preference
dans unPreferenceCategory
, vous devez faire ceci:XML:
Java:
la source
PreferenceCategory
.Dans le cas où la préférence est un enfant direct de l'écran des préférences, voici un code autonome:
la source
findPreference
pour la catégorie et supprimer la préférence de la catégorieSi vous voulez quelque chose qui changera dynamiquement les préférences, par exemple sur un SwitchPreference, j'ai trouvé que le meilleur moyen est de mettre toutes mes sous-options dans deux conteneurs de catégorie. Au départ, tout sera affiché, puis supprimez simplement les bits dont vous ne voulez pas. Le plus intelligent, c'est que vous déclenchez simplement la recréation lorsque quelque chose change et que vous n'avez pas à créer manuellement quoi que ce soit ou à vous soucier de remettre les choses dans le bon ordre.
Le seul inconvénient que je peux voir avec cela, c'est qu'il y a un flash car l'écran est recréé à partir de zéro.
la source
Dans votre fichier XML:
Dans votre code:
la source
Si vous utilisez PreferenceFragmentCompat, vous pouvez définir la visibilité en xml.
Les préférences de votre xml seront automatiquement converties en versions AppCompat. Vous pouvez ensuite utiliser l' attribut ' app: isPreferenceVisible ' dans votre xml
preferences.xml
L'attribut est documenté sur https://developer.android.com/guide/topics/ui/settings/components-and-attributes
L'ajout
PreferenceFragmentCompat
est documenté sur https://developer.android.com/guide/topics/ui/settings/#inflate_the_hierarchyExemple:
la source
Je recommande d'utiliser la préférence v7, il a une
setVisible()
méthode. Mais je ne l'ai pas encore essayé. En conséquence, vous devez utiliser à laPreferenceFragment
place dePreferenceActivity
.la source
Dans le fichier XML, vous pouvez créer une préférence masquée en laissant les balises de titre et de résumé vides.
la source
Voici une façon générique de faire cela qui fonctionne indépendamment du fait que la préférence soit sous
PreferenceCategory
ouPreferenceScreen
.la source
Depuis la
getParent()
méthode Android API 26 est disponible: https://developer.android.com/reference/android/preference/Preference.html#getParent ()Bien que vous puissiez faire ce qui suit:
la source
Vous pouvez le faire de 2 manières:
1.Si vous utilisez la bibliothèque de support, vous pouvez créer une carte de l'arborescence des préférences et de leurs parents, puis supprimer une préférence en utilisant son parent. Voici une fonction pour générer une telle carte:
la source
setVisible()
est disponible depuis la version 24.1.0 de la bibliothèque de support.setVisibile()
méthode était disponible à partir de android-x que j'ai essayé de clarifier. Aucune offense s'il vous plaît.Si vous souhaitez évaluer, et sur la base de ce masque, une alternative peut être
Tout cela doit être à l'intérieur
la source
Si vous faites ce que je pense que vous essayez de faire (parce que j'essaye de le faire maintenant), il vaudrait peut-être mieux activer / désactiver la préférence. Parce que sa suppression le retire de l'écran des préférences et vous ne pourrez peut-être pas le rajouter où vous le souhaitez si vous avez créé l'écran par programme.
pref.setEnabled (false); pref.setEnabled (vrai);
bien que cela puisse être obsolète. Cela fonctionne pour le cas d'utilisation que je traverse actuellement.
la source