web-dev-qa-db-fra.com

Comment supprimer ProfreCeCategory Programmatiquement?

Je dois supprimer une catégorie préférenticatégorie. Je pourrais supprimer les préférences individuelles avec le code suivant, mais je dois aussi supprimer (désactiver) toute la préférence.

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

EDIT : Voici le code de travail pour une catégorie préférenticategory "Prefcat" et une préférence pour enfants "PREF22":

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

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

Ne chargez pas le PreferenceCategory en premier lieu.

Si vous définissez vos préférences en Java, ne créez pas le PreferenceCategory.

Si vous définissez vos préférences dans XML, utilisez trois fichiers XML:

  1. Un pour des trucs avant cette catégorie magique
  2. Un pour la catégorie magique
  3. Un pour les trucs après cette catégorie magique

Dans les situations où vous souhaitez la catégorie, chargez les trois fichiers XML. Dans les situations où vous ne voulez pas la catégorie, ne chargez que les premier et troisième fichiers XML.

17
CommonsWare

vous pouvez masquer une catégorie en faisant référence à PreferenceScreen:

Je suis votre 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>

dans vous string.xml: N'oubliez pas de définir cette nouvelle chaîne

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

dans votre code:

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

puis supprimez la catégorie de vos préférencesCrean:

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

Fournissez une clé pour vos préférencesCrean et votre préfectureCegory dans XML:

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

  <PreferenceCategory
     Android:summary="@string/settings_billing_summary"
     Android:title="Title"
     Android:key="myPrefCat" >
      <Preference
      Android:key="someKey"
      Android:summary="Sum"
      Android:title="Title" />
   </PreferenceCategory>

</PreferenceScreen>

À partir de votre classe, vous pouvez maintenant vous référer à vos préférencesCreen et préférencesCecategory et à utiliser la méthode SupprimerPreference () pour supprimer la préférence de l'écran:

    PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("preferenceScreen");
    PreferenceCategory myPrefCat = (PreferenceCategory) findPreference("myPrefCat");
    preferenceScreen.removePreference(myPrefCat);

Cette réponse est basée sur Réponse de Douarbo qui semble être obsolète, mais est fondamentalement la même chose.

11
Mdlc

Vous pouvez trouver l'ensemble de l'arbre de parents-parents en parcourant toutes les préférences, puis vérifiez quel est le parent de toute préférence que vous souhaitez, même sans utiliser l'ID du parent:

public static Map<Preference,PreferenceGroup> buildPreferenceParentTree(final PreferenceActivity activity)
    {
    final Map<Preference,PreferenceGroup> result=new HashMap<Preference,PreferenceGroup>();
    final Stack<PreferenceGroup> curParents=new Stack<PreferenceGroup>();
    curParents.add(activity.getPreferenceScreen());
    while(!curParents.isEmpty())
      {
      final PreferenceGroup parent=curParents.pop();
      final int childCount=parent.getPreferenceCount();
      for(int i=0;i<childCount;++i)
        {
        final Preference child=parent.getPreference(i);
        result.put(child,parent);
        if(child instanceof PreferenceGroup)
          curParents.Push((PreferenceGroup)child);
        }
      }
    return result;
    }

utilisation des échantillons:

  final Map<Preference,PreferenceGroup> preferenceParentTree=buildPreferenceParentTree(SettingsActivity.this);
  final PreferenceGroup preferenceGroup=preferenceParentTree.get(preferenceToRemove);
  preferenceGroup.removePreference(preferenceToRemove);

Edit: semble qu'il y ait une nouvelle API pour cela:

https://developer.andrid.com/reference/androidx/preference/preference#sesesesevision (Boolean)

Je ne sais pas si c'est actuellement disponible ou non, cependant.

2
android developer