2017-07-28 612 views
0

我有一個帶有首選項屏幕的Android應用程序。該屏幕中唯一的首選項是具有四個選項的MultiSelectListPreference。我試圖實施onPreferenceChange方法來在每次更改選項時更新首選項摘要。onPreferenceChange方法中的奇怪值

爲此,我將newValue對象強制轉換爲字符串的HashSet,但是當我註銷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; 
} 

而且這裏是日誌信息打印出來,當我選擇所有四個選項:

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

編輯:這裏是所有的圖像可能的選項:

有誰知道爲什麼會發生這種情況?

+0

你可以顯示圖像首選項屏幕,基本上我打印了所有列表的可能性。 –

+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

你是對的我的壞,只是把方法之外,看到瓦斯發生。 –

+0

如果工作正常,您可以更新方法之外的sumary,只需獲取選定的值並更新總括。 –