我使用的是Android ICS SDK,我想做一个使用MultiSelectListPreference的PreferenceScreen(可用于API Level 11& +。
我只想在SharedPref中保留该值,刷新MultiSelectListPreference的摘要并刷新对话框列表。
这是我的代码:
Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.newgame);
mMultiCharacters.setOnPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor settingsEditor = settings.edit();
settingsEditor.putStringSet( preference.getKey() , (Set<String>) newValue);
settingsEditor.commit();
//display new summary
initChar();
return false;
}
XML部分:
<MultiSelectListPreference
android:entries="@array/characterNames"
android:entryValues="@array/characterNames"
android:key="pref_characters"
android:persistent="true"
android:title="Chars :" />
这种行为很奇怪。对话列表不刷新......一些想法?谢谢!
答案 0 :(得分:2)
嗯..我曾经使用MultiSelectListPreference
一次,而这就是我“想到”......
您正在false
侦听器中返回onPreferenceChange
,我认为它不仅不会提交更改,还可能会恢复到以前的值。我知道您通过settingsEditor
提交了更改,但可能是false
返回正在恢复旧值,所以我建议返回true。
还有一件事,newValue
对象实际上是HashSet
,其中包含新选择的值,因此您可以使用它来执行任何操作,但不必使用它来提交如果您返回true,则更改。
祝你好运。