¿Cómo eliminar una preferencia de PreferenceActivity?

Estoy usando PreferenceActivity. ¿Cómo puedo eliminar una preferencia? Parece que no puedo conseguir que esto funcione:

Preference p = findPreference("grok"); boolean worked = getPreferenceScreen().removePreference(p); // worked == false. 

Así que la preferencia se encuentra, pero la llamada removePreference () falla. ¿Cuál es la manera correcta de hacer esto? Estoy utilizando un archivo preference.xml para las claves como así:

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="foo"> <CheckBoxPreference android:key="grok" /> ... 

Gracias

Puede quitar sólo el hijo exacto en PreferenceGroup. Así que en su caso, debe agregar alguna clave a la categoría de preferencias (con title = "foo"), a continuación, findPreference con esta clave y, a continuación, quitar niño

XML:

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:key="category_foo" android:title="foo"> <CheckBoxPreference android:key="grok" /> ... 

Código:

 Preference p = findPreference("grok"); // removing Preference ((PreferenceGroup) findPreference("category_foo")).removePreference(p); 

En lugar de configurar varios identificadores, puede obtener todo el árbol de preferencias y encontrar el padre de cualquier preferencia y, a continuación, eliminar cualquiera de sus preferencias de niños:

 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; } 

ejemplo:

  final Map<Preference,PreferenceGroup> preferenceParentTree=buildPreferenceParentTree(SettingsActivity.this); final PreferenceGroup preferenceParent=preferenceParentTree.get(preferenceToRemove); preferenceGroup.removePreference(preferenceToRemove); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.