2017-07-28 25 views
0

私は、設定画面を持つAndroidアプリを持っています。その画面の唯一の設定は、4つのオプションを持つMultiSelectListPreferenceです。私はonPreferenceChangeメソッドを実装して、オプションが変更されるたびに環境設定の要約を更新しようとしています。onPreferenceChangeメソッドの奇妙な値

これを行うには、newValueオブジェクトをHashSet of Stringsにキャストしていますが、HashSetの内容をログアウトすると、ユーザーが選択した値と一致しません。

これは私のコードです:

@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 
    if (preference instanceof MultiSelectListPreference) { 
     MultiSelectListPreference pref = (MultiSelectListPreference) preference; 
     HashSet<String> values = (HashSet<String>) newValue; 
     Log.e("SettingsActivity", values.toString()); 
    } 

    return true; 
} 

そして、ここで私はすべての4つのオプションを選択したときにプリントアウトログメッセージさ:

07-28 13:13:00.896 31196-31196/com.example.android.theguardiannews E/SettingsActivity: 
[ film , environment, business , environment , politics, business] 

編集:はここにすべてのイメージがあります可能なオプション:

これはなぜ起こっているのですか?

+0

すべてのリストposibilitysのプリントを好む基本的な画面。 –

+0

@BrunoFerreiraあなたが求めたイメージで私の質問を編集しました。 –

答えて

0

ですからonPreferenceChange(内部でこれを実行してみてください)方法:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
Set<String> selections = sharedPrefs.getStringSet("Your_preference_key", null); 
String[] selected = selections.toArray(new String[] {}); 
Toast.makeText(context, selected[all], Toast.LENGTH_LONG).show(); 

と更新sumaryのためだけに、この行を追加します。

:だからコードは、おそらくのようなもの

Preference pref = findPreference("pref_key"); 
pref.setSummary(selected[all]); 

public boolean onPreferenceChange(Preference preference, Object newValue) { 
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    Set<String> selections = sharedPrefs.getStringSet("Your_preference_key", null); 
    String[] selected = selections.toArray(new String[] {}); 
    Preference pref = findPreference("Your_pref_key"); 
    pref.setSummary(selected[all]); 

    return true; 
} 
+0

値が更新される前に表示されませんか?私は、値が更新される前に値を表示するように、onPreferenceChangedが呼び出された後に値が更新されると思います。私が間違っている場合私を修正してください。 –

+0

あなたは私の悪いところです、ちょうどメソッドの外に置くとwathが発生します。 –

+0

場合は、選択した値を取得し、sumaryを更新するだけで正常に動作する場合は、メソッド外でsumaryを更新することができます。 –