J'ai une activité qui étend PreferenceActivity. Je charge les préférences à partir du fichier xml. Mais dans certains cas, j'ai besoin de masquer complètement 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 veux supprimer complètement cette préférence de l'écran. Est-ce possible ?
Réponses
Trop de publicités?
user3165739
Points
136
Dans votre fichier XML :
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="preferenceScreen">
<PreferenceCategory
android:key="personalisation"
android:title="your title here">
<ThemedPreference
android:key="animation" />
</PreferenceScreen>
Dans votre code :
PreferenceScreen pPreferenceScreen = (PreferenceScreen) findPreference("preferenceScreen");
PreferenceCategory pCategory = (PreferenceCategory) findPreference("personalisation");
ThemedPreference pThemePref = (ThemedPreference) findPreference("animation");
pPreferenceScreen.removePreference(pCategory); //remove category
pCategory.removePreference(pThemePref); // remove preference
Tea
Points
136
Al Ro
Points
91
birdy
Points
2521
Depuis l'API 26 d'Android getParent()
est disponible : [https://developer.Android.com/reference/Android/preference/Preference.html#getParent()](https://developer.android.com/reference/android/preference/Preference.html#getParent())
Cependant, vous pouvez faire ce qui suit :
preference.getParent().removePreference(preference);
Sam
Points
3542
Voici une méthode générique qui fonctionne indépendamment du fait que la préférence se trouve dans un fichier PreferenceCategory
o PreferenceScreen
.
private void removePreference(Preference preference) {
PreferenceGroup parent = getParent(getPreferenceScreen(), preference);
if (parent == null)
throw new RuntimeException("Couldn't find preference");
parent.removePreference(preference);
}
private PreferenceGroup getParent(PreferenceGroup groupToSearchIn, Preference preference) {
for (int i = 0; i < groupToSearchIn.getPreferenceCount(); ++i) {
Preference child = groupToSearchIn.getPreference(i);
if (child == preference)
return groupToSearchIn;
if (child instanceof PreferenceGroup) {
PreferenceGroup childGroup = (PreferenceGroup)child;
PreferenceGroup result = getParent(childGroup, preference);
if (result != null)
return result;
}
}
return null;
}