Tengo una actividad que extiende PreferenceActivity. Estoy cargando preferencias del archivo xml. Pero en algunos casos necesito ocultar completamente una de las preferencias de la pantalla en función del estado de mi aplicación. Hay un método setEnabled, pero no es exactamente lo que quiero. Quiero eliminar esa preferencia de la pantalla por completo. Es posible ?
android
preferences
Alex Volovoy
fuente
fuente
setEnabled()
Si
Preference
está dentro de aPreferenceCategory
, debe hacer esto:XML:
Java:
fuente
PreferenceCategory
.En el caso de que la Preferencia sea un elemento secundario directo de la pantalla de preferencias, aquí hay un código independiente:
fuente
findPreference
para la categoría y eliminar la preferencia de la categoríaSi desea algo que cambie dinámicamente las preferencias, por ejemplo, en una SwitchPreference, he encontrado que la mejor manera es poner todas mis opciones secundarias en contenedores de dos categorías. Inicialmente tendrá todo lo que se muestra, luego simplemente elimine los bits que no desea. Lo más inteligente es que simplemente activa la recreación cuando algo cambia y luego no tiene que crear nada manualmente ni preocuparse por volver a poner las cosas en el orden correcto.
El único inconveniente que puedo ver con esto es que hay un destello ya que la pantalla se recrea desde cero.
fuente
En su archivo XML:
En su código:
fuente
Si está utilizando PreferenceFragmentCompat , puede establecer la visibilidad en xml.
Las preferencias en su xml se convertirán a versiones de AppCompat automáticamente. Luego puede usar el atributo ' app: isPreferenceVisible ' en su xml
preferencias.xml
El atributo está documentado en https://developer.android.com/guide/topics/ui/settings/components-and-attributes
La adición
PreferenceFragmentCompat
está documentada en https://developer.android.com/guide/topics/ui/settings/#inflate_the_hierarchyEjemplo:
fuente
Recomiendo usar la preferencia v7, tiene
setVisible()
método. Pero aún no lo he probado. En consecuencia, debe usar enPreferenceFragment
lugar dePreferenceActivity
.fuente
En el archivo XML puede hacer una preferencia oculta dejando vacías las etiquetas de título y resumen.
fuente
Aquí hay una forma genérica de hacer esto que funciona independientemente de si la preferencia está bajo
PreferenceCategory
oPreferenceScreen
.fuente
Dado que el
getParent()
método Android API 26 está disponible: https://developer.android.com/reference/android/preference/Preference.html#getParent ()Aunque puedes hacer lo siguiente:
fuente
Puedes hacer esto de 2 maneras:
1.Si usa la biblioteca de soporte, puede construir un mapa del árbol de preferencias y sus padres, y luego eliminar una preferencia usando su padre. Aquí hay una función para generar dicho mapa:
fuente
setVisible()
está disponible desde la versión 24.1.0 de la biblioteca de Soporte.setVisibile()
método estuviera disponible en android-x, que intenté aclarar. Sin ofender por favor.Si desea evaluar, y en base a esa máscara, una alternativa puede ser
Todo esto debe estar dentro
fuente
Si está haciendo lo que creo que está tratando de hacer (porque estoy tratando de hacerlo ahora), podría ser mejor habilitar / deshabilitar la preferencia. Debido a que eliminarlo lo saca de la pantalla de preferencias y es posible que no pueda volver a agregarlo donde lo desea si creó la pantalla mediante programación.
pref.setEnabled (falso); pref.setEnabled (verdadero);
aunque esto podría estar en desuso. Funciona para el caso de uso que estoy pasando en este momento.
fuente