¿Cómo hacer lo contrario de atributo de preferencia android: dependencia?

¿Hay atributo XML que hace exactamente lo contrario de android:dependency ?

Lo que me gustaría que la preferencia dependiente se habilite cuando el otro no está marcado y desactivado cuando está marcado.

Editar: tal vez el problema no es con android:dependency tal vez hay un atributo xml que puedo añadir para que el valor predeterminado para esa preferencia deshabilitada y, a continuación, android:dependency se alternará de manera opuesta como quiero.

Editar de nuevo: He intentado establecer android:enabled="false" en la preferencia y lo deshabilita como quiero, pero incluso con que sea dependiente de la otra preferencia no lo habilitó como yo había esperado

5 Solutions collect form web for “¿Cómo hacer lo contrario de atributo de preferencia android: dependencia?”

En realidad lo encontré por mi cuenta y pensé que lo publicaría aquí para ayudar a cualquiera que tenga este mismo problema:

 android:disableDependentsState="true" 

Ponga eso en la preferencia de control.

Dmytro Zarezenko le preguntó si quería que algunas dependencias se habilitaran cuando la preferencia de la que dependen es verdadera y algunas se habiliten cuando esa preferencia es falsa.

Utilice el método descrito anteriormente para establecer todas las preferencias dependientes de un tipo (que siempre tienen el mayor número). Entonces (con la clase que tiene implementos OnSharedPreferenceChangeListener) tiene código como este en la actividad de preferencia y / o fragmento de preferencia:

 @Override public void onResume() { super.onResume(); sharedPreferences.registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { super.onPause(); sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("pref_that_they_depend-upon") { // Iterate over the preferences that need to be enabled or disabled, // lets say there is just one called the_awkward_one. Preference preference = findPreference("the_awkward_one"); // Or preference.setEnabled(! sharedPreferences.getBoolean(("pref_that_they_depend-upon", defaultValue)); preference.setEnabled(sharedPreferences.getBoolean(("pref_that_they_depend-upon", defaultValue)); } } 

Este es mi ejemplo de código para hacer esto desde código y no XML.

  String eitherKey = "either"; String orKey = "or"; CheckBoxPreference either = new CheckBoxPreference(this); either.setKey(eitherKey); either.setTitle("Either"); either.setSummary("It is either one or"); either.setDefaultValue(false); either.setDisableDependentsState(true); inlinePrefCat.addPreference(either); try { //Crossfade Time CheckBoxPreference or = new CheckBoxPreference(this); or.setKey(orKey); or.setTitle("Or"); or.setSummary("the other"); inlinePrefCat.addPreference(or); or.setDependency(eitherKey); } catch (Exception e) { } 

Necesito cambiar el valor de la preferencia dependiente, por lo que publicar mi código a continuación, si alguien quiere hacer esto:

 @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if(preference.getKey().equals("key_a")) { ((CheckBoxPreference)findPreference("key_b").setChecked(false); } return super.onPreferenceTreeClick(preferenceScreen, preference); } 

Haga que su implement PreferenceActivity

SharedPreferences.OnSharedPreferenceChangeListener

Declarar en PreferenceActivity :

SharedPreferences prefs;

Inicializar en onCreate :

SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(this); prefs = sPrefs;

Y registro en el oyente de cambio de preferencia compartida

 prefs.registerOnSharedPreferenceChangeListener(this); 

Hacer lo mismo que Steve dijo en los métodos onResume y onPause .

Implementación de onSharedPreferenceChanged listener:

 @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.d("SettingsActivity","onSharedPreferenceChanged LISTENER FIRED"); if (key.equals(getString(R.string.key_call))) { //if call true if (sharedPreferences.getBoolean(getString(R.string.key_call), false)) { Preference preference = findPreference(getString(R.string.key_record)); preference.setEnabled(false); } else { // if call false Preference preference = findPreference(getString(R.string.key_record)); preference.setEnabled(true); } } if (key.equals(getString(R.string.key_record))) { //if record true if (sharedPreferences.getBoolean(getString(R.string.key_record), false)) { Preference preference = findPreference(getString(R.string.key_call)); preference.setEnabled(false); } else { // if record false Preference preference = findPreference(getString(R.string.key_call)); preference.setEnabled(true); } } } 

En este caso, tengo 2 preferencias mutuamente excluyentes en PreferenceActivity . Llamada y registro. Cuando ambos están desmarcados, ambos se pueden comprobar, pero como el usuario comprueba uno de ellos, el otro se deshabilita (en gris). Cuando el usuario desactiva la preferencia seleccionada, el usuario puede comprobar la otra.

En ambos de ellos pueden depender otras preferencias y que se pueden resolver con el atributo android:dependancy en el archivo XML.

  • Desarrollo de Android: error de tema perdido en eclipse ide para archivos xml de diseño
  • ¿Cómo usar la vista propia en el diseño?
  • Error al analizar etiquetas XML no coincidentes
  • Obligar a un botón a permanecer en la parte inferior de la pantalla del teléfono
  • Cómo acceder a la estructura de cadenas xml siguiente estructura
  • Ajustes redimensionables en Android 3.1
  • ¿Cómo puedo volver a utilizar este botón de Android?
  • convertir la interfaz de usuario de Android a código
  • Android string-array con todos los países en diferentes idiomas
  • Android: Lectura de XML desde un recurso local (para pruebas)
  • Configuración de lint.xml de Android Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.