62 votes

Comment faire en face de la préférence de l'attribut android:la dépendance?

Est-il attribut XML qui fait exactement le contraire de android:dependency?

Ce que je voudrais dépendante de préférence être activée lorsque l'autre n'est PAS activée et désactivée lorsque cette case EST cochée.

edit: peut-être que le problème n'est pas avec android:dependency peut-être qu'il est un attribut xml que je peux ajouter à rendre la valeur par défaut pour que la préférence désactivé et puis android:dependency va basculer le chemin inverse comme je veux.

modifier à nouveau: J'ai essayé de réglage android:enabled="false" dans les préférence et il désactive ce que je veux, mais même avec ça dépend de l'autre de préférence il n'a pas l'activer comme je l'avais espéré

130voto

brybam Points 2201

En fait, trouvé sur mon propre et pensé que je venais de poster ici afin d'aider toute personne qui peut avoir ce même problème:

android:disableDependentsState="true"

Mis dans le contrôle de la préférence.

9voto

Steve Waring Points 209

Dmytro Zarezenko demandé si vous vouliez un peu de dépendances être activée lorsque la préférence dont ils dépendent est vrai et certains être activée lorsque cette préférence est faux.

Utilisez la méthode décrite ci-dessus pour régler le tout à la charge des préférences d'un type (qui a jamais le plus grand nombre). Ensuite (avec la classe a implémente OnSharedPreferenceChangeListener) ont ce type de code dans l'Activité de Préférence et/ou de Préférence de Fragment:

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

1voto

Justin Points 456

C'est mon exemple de code pour le faire à partir du code et pas le 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)
  {
  }

0voto

davidm Points 3

J'ai besoin de changer la valeur de la dépendants de préférence, donc je poste mon code ci-dessous, si quelqu'un veut faire ceci:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X