对Android PreferenceScreen使用MultiSelectListPreference

时间:2012-01-02 18:16:09

标签: android

我使用的是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 :" />

这种行为很奇怪。对话列表不刷新......一些想法?谢谢!

1 个答案:

答案 0 :(得分:2)

嗯..我曾经使用MultiSelectListPreference一次,而这就是我“想到”......

您正在false侦听器中返回onPreferenceChange,我认为它不仅不会提交更改,还可能会恢复到以前的值。我知道您通过settingsEditor提交了更改,但可能是false返回正在恢复旧值,所以我建议返回true。

还有一件事,newValue对象实际上是HashSet,其中包含新选择的值,因此您可以使用它来执行任何操作,但不必使用它来提交如果您返回true,则更改。 祝你好运。