2016-06-30 8 views
0

私はPreferenceActivityを使用し、onPreferenceChangeメソッドを実装しています。 どのような設定が変更されたかを確認していますので、私はそれを実行できますが、.equals()メソッドはfalseを返し続けます。私はアプリをデバッグし、両方のフィールドが文字列student_idを返すことを示しています。何か不足していますか?この時点で は、変更がここpreference.getKey.equals()はfalseを返します

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

onPreferenceChangestrings.xml

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

コードからstudent_id_key嗜好変化

から来ていることとして、xとyを示し、デバッガのスナップショットです2つの文字列 enter image description here

私は==しかし、これは文字列の比較では、私の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

両方の値が本当に等しいことを証明するための努力を示すポストコードです。 – njzk2

+0

'if'を逆にしようとします。これは' if(preference.getContext()。getString(R.string.student_id_key).equals(preference。 getkey())){} 'おそらく助け=) – spirit

+0

' x.equals(y) 'を使わないのはなぜですか? – spirit

答えて

3

からの要素の抜粋です enter image description here

同じ結果に、==が決して(まあ、めったにない限りますので、必ず、.equalsを使用同じ変数をそれ自身と比較している)は文字列のために働く。なぜならそれらは不変であるからである。

編集: だから、あなたはそのブロック(または重要なコード)内にコードを持っていないからだと思います。そのブロック内にprintステートメントを追加し、それが印刷されるかどうかを確認します。コンパイラはデッドコードを最適化しているので、本当にそうでないときに奇妙なことが起こっていると思うかもしれません。 equalsチェックをブール値に送り、評価方法を確認してください。

+0

いいえ、キーは、プリファレンスから実際の値を取得するためのキーの値です。したがって、値を取得しているときは、そのキーのマッピングにマップされている値です。あなたはKey - > Keyのマッピングを保存していない限り、同じではないでしょう。 – Submersed

+0

それからデバッガはこれを視覚的に表示するでしょうか?私はこれがうまくいく例をたくさん見てきました。その場合ではない場合、解決策は何ですか –

+0

私は '.equals()'を使用しています。 '=='は他の解決策を試したことを示すためにのみ表示されます –

関連する問題