¿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

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.

  • ¿Es posible tener más de un archivo de recursos de cadena en Android?
  • Desarrollo de Android: error de tema perdido en eclipse ide para archivos xml de diseño
  • Referencia una pantalla de preferencias de Android separada desde dentro de otra pantalla de preferencias en XML
  • Crashing debido a "No identificador de paquete al obtener el valor del número de recurso ..."
  • Problema al analizar cadena xml en java
  • android cómo establecer el icono de la casilla de verificación en el derecho?
  • ¿Cómo puedo volver a utilizar este botón de Android?
  • ¿Cómo establecer la distancia entre textview y drawable en un botón?
  • El botón no está llamando a OnClickListener con el primer clic
  • Obtener el id de una vista como String en el evento onClick
  • Cómo establecer la línea como un fondo utilizando xml (forma) a continuación para EditText?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.