2016-06-30 25 views
0

Ich verwende eine PreferenceActivity und implementiere die onPreferenceChange Methode. Ich überprüfe, welche Vorliebe geändert wird, also kann ich es handeln, jedoch gibt die .equals() Methode falsch zurück. Ich habe die App debuggt und es zeigt, dass beide Felder die Zeichenfolge student_id zurückgeben. Fehle ich etwas? An diesem Punkt ist der Wechsel von der Änderung in onPreferenceChangepreferences.getKey.equals() gibt false zurück

if(preference.getKey().equals(preference.getContext().getString(R.string.student_id_key))){ 
      //do something here, but its returning false 
     } 

Hier ist eine Momentaufnahme des Debuggers, zeigt x und y als die

Von strings.xml

<string name="student_id_key" translatable="false">student_id</string> 

Code student_id_key Präferenz kommen zwei Zeichenfolgen enter image description here

Ich habe versucht,zu verwendenaber mit dem gleichen Ergebnis enter image description here

Dies ist der Auszug des Elements aus meinem prefs.xml

<EditTextPreference 
    android:capitalize="words" 
    android:defaultValue="@string/student_id_default" 
    android:inputType="textCapWords" 
    android:hint="@string/student_id_hint" 
    android:key="@string/student_id_key" 
    android:maxLines="1" 
    android:maxLength="9" 
    android:selectAllOnFocus="true" 
    android:singleLine="true" 
    android:title="@string/pref_title_display_name" /> 
+0

Postleitzahl, die Ihre Bemühungen zu beweisen, dass beide Werte sind in der Tat gleich – njzk2

+0

versuchen, Ihre 'if', wie dies 'if (preference.getContext(). GetString (R.string.student_id_key) .equals (Präferenz. getKey())) {} 'vielleicht hilft es =) – spirit

+0

warum verwenden Sie nicht' x.equals (y) '? – spirit

Antwort

3

Mit String-Vergleich, verwenden Sie immer .equals, da == wird nie (gut, selten, es sei denn Sie vergleichen die gleiche Variable mit sich selbst) arbeiten für String, da sie unveränderlich sind.

Edit: Also, ich denke es liegt daran, dass Sie keinen Code innerhalb dieses Blocks (oder Code, der zählt). Fügen Sie eine Druckanweisung innerhalb dieses Blocks hinzu und prüfen Sie, ob sie gedruckt wird. Compiler optimieren den toten Code, sodass Sie vielleicht denken, dass etwas Seltsames passiert, wenn es nicht wirklich ist. Führen Sie die Gleichheitsüberprüfung in einen booleschen Wert ein und sehen Sie, wie sie ausgewertet wird.

+0

Nein, der Schlüssel ist der Wert des Schlüssels, um den tatsächlichen Wert aus den Einstellungen abzurufen. Wenn Sie also den Wert erhalten, ist dies der Wert, der der Zuordnung dieser Taste zugeordnet ist. Sie werden wahrscheinlich nicht gleich sein, es sei denn, Sie speichern Key -> Key mappings. – Submersed

+0

dann würde der Debugger das visuell zeigen? Ich habe viele Beispiele gesehen, wo das funktioniert. Wenn es nicht der Fall ist, was ist die Lösung –

+0

Nur um hinzuzufügen, verwende ich '. Equals()' das '==' wird nur gezeigt, um zu zeigen, dass ich andere Lösungen ausprobiert haben –