Wie mache ich das Gegenteil des Präferenzattributs android:dependency?
Lesezeit: 4 Minuten
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
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
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:
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.
11217400cookie-checkWie mache ich das Gegenteil des Präferenzattributs android:dependency?yes