How to remove PreferenceCategory programmatically?

Harald Wilhelm picture Harald Wilhelm · Apr 9, 2011 · Viewed 23k times · Source

I need to remove a PreferenceCategory programmatically. I could remove the individual preferences with the following code but I need to remove (disable) whole PreferenceCategory as well.

PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");
((PreferenceGroup) findPreference("prefcat")).removePreference(etp);

Edit: Here's the working code for a PreferenceCategory "prefcat" and a child preference "pref22":

PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");

PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("prefcat");
if (preferenceGroup != null) {
    preferenceGroup.removePreference(etp);
    preferenceScreen.removePreference(preferenceGroup);
}

Answer

douarbou picture douarbou · Jul 9, 2012

you can hide a category by getting reference to PreferenceScreen:

I your xml :

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:key="@string/preferenceScreen">

//set all you values
//Preference, PreferenceCategory and/or CheckBoxPreference

</PreferenceScreen>

in you string.xml : don't forgot to set this new string

 <string name="preferenceScreen" translatable="false">preferenceScreen</string>

in you code:

preferenceScreen = (PreferenceScreen) findPreference(getResources().getString(R.string.preferenceScreen));

and then remove the category from your PreferenceScreen :

myCategory = (PreferenceCategory) findPreference(getResources().getString(R.string.my_category));
myPreferenceScreen.removePreference(myCategory);