¿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);