Wie mache ich das Gegenteil des Präferenzattributs android:dependency?

Lesezeit: 4 Minuten

Benutzer-Avatar
brybam

Gibt es ein XML-Attribut, das genau das Gegenteil von tut android:dependency?

Was ich möchte, dass die abhängige Einstellung aktiviert wird, wenn die andere NICHT aktiviert ist, und deaktiviert, wenn sie aktiviert ist.

Bearbeiten: Vielleicht ist das Problem nicht mit android:dependency Vielleicht gibt es ein XML-Attribut, das ich hinzufügen kann, um die Standardeinstellung für diese Einstellung zu deaktivieren, und dann android:dependency werde es in die entgegengesetzte Richtung umschalten, wie ich will.

Nochmals editieren: Ich habe die Einstellung versucht android:enabled="false" in der Einstellung und es deaktiviert es wie ich will, aber selbst wenn es von der anderen Einstellung abhängig ist, hat es es nicht so aktiviert, wie ich es mir erhofft hatte

Benutzer-Avatar
brybam

Ich habe es tatsächlich selbst gefunden und dachte, ich würde es einfach hier posten, um allen zu helfen, die möglicherweise dasselbe Problem haben:

android:disableDependentsState="true"

Setzen Sie das in die Steuerungspräferenz.

  • bestätigt .. fügen Sie diese Zeile zu der Einstellung hinzu, die Sie in android:dependency eingegeben haben 🙂

    – Patrick Boos

    22. Februar 2011 um 1:44 Uhr

  • Um es noch klarer zu machen: Setzen Sie diese Zeile auf die Präferenz, auf der sich Ihre Präferenz befindet beruht. Das Dokument sagt: „Der Zustand (wahr für an oder falsch für aus), der verursacht Angehörige deaktiviert werden”.

    – Vorstand

    30. November 2011 um 10:50 Uhr


  • Aber wenn ich einige Einstellungen aktivieren und einige Einstellungen deaktivieren möchte, hängt dies von einer Kontrollkästchen-Einstellung ab?

    – Dmytro Zaresenko

    8. November 2012 um 14:22 Uhr

  • perfekt! Für ein deutlicheres “Legen Sie das in die Kontrollpräferenz” bedeutet, dass Sie android:disableDependentsState=”true” Code in SwitchPreference (Master) hinzufügen, der sich auf andere (Slaves) auswirkt.

    – Mehmet

    13. Dezember 2017 um 13:50 Uhr

Benutzer-Avatar
Steve Waring

Dmytro Zarezenko fragte, was wäre, wenn Sie möchten, dass einige Abhängigkeiten aktiviert werden, wenn die Präferenz, von der sie abhängen, wahr ist, und andere aktiviert werden, wenn diese Präferenz falsch ist.

Verwenden Sie die oben beschriebene Methode, um alle abhängigen Einstellungen eines Typs festzulegen (je nachdem, welche die größere Anzahl haben). Dann (wobei die Klasse OnSharedPreferenceChangeListener implementiert) Code wie diesen in der Präferenzaktivität und/oder dem Präferenzfragment haben:

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

Dies ist mein Codebeispiel, um dies aus Code und nicht aus XML zu tun.

  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)
  {
  }

Ich muss den Wert der abhängigen Präferenz ändern, also poste ich meinen Code unten, falls jemand dies tun möchte:

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

Benutzer-Avatar
Primož Majhen

Mach dein PreferenceActivity implement

SharedPreferences.OnSharedPreferenceChangeListener

erklären ein PreferenceActivity:

SharedPreferences prefs;

ein initialisieren onCreate:

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

und registrieren Sie sich beim Shared Preference Change Listener

prefs.registerOnSharedPreferenceChangeListener(this);

Mach das gleiche wie Steve gesagt hat onResume und onPause Methoden.

Implementierung von onSharedPreferenceChanged Hörer:

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

In diesem Fall habe ich 2 sich gegenseitig ausschließende Einstellungen PreferenceActivity. Anrufen und aufnehmen. Wenn beide deaktiviert sind, können beide aktiviert werden, aber wenn der Benutzer einen von ihnen aktiviert, wird der andere deaktiviert (ausgegraut). Wenn der Benutzer die aktivierte Einstellung deaktiviert, kann der Benutzer die andere aktivieren.

Von beiden können andere Vorlieben abhängen und damit kann gearbeitet werden android:dependancy Attribut in der XML-Datei.

1121740cookie-checkWie mache ich das Gegenteil des Präferenzattributs android:dependency?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy