Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android首选项屏幕的MultiSelectListPreference_Android - Fatal编程技术网

使用Android首选项屏幕的MultiSelectListPreference

使用Android首选项屏幕的MultiSelectListPreference,android,Android,我正在使用Android ICS SDK,我想做一个使用MultiSelectListPreference的首选项屏幕(适用于API级别11&+) 我只想保留SharedPref中的值,刷新MultiSelectListPreference的摘要并刷新对话框列表 这是我的密码: Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPref

我正在使用Android ICS SDK,我想做一个使用MultiSelectListPreference的首选项屏幕(适用于API级别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;
}
覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.newgame);
mMultiCharacters.setOnPreferenceChangeListener(此);
}
@凌驾
公共布尔onPreferenceChange(首选项首选项,对象newValue){
SharedReferences设置=PreferenceManager.GetDefaultSharedReferences(此);
SharedReferences.Editor设置编辑器=设置。编辑();
settingsEditor.putStringSet(preference.getKey(),(Set)newValue);
settingsEditor.commit();
//显示新摘要
initChar();
返回false;
}
XML部分:

    <MultiSelectListPreference
        android:entries="@array/characterNames"
        android:entryValues="@array/characterNames"
        android:key="pref_characters"
        android:persistent="true"
        android:title="Chars :" />


这种行为很奇怪。对话框列表没有刷新…一些想法?谢谢!

好吧..我用过一次
MultiSelectListPreference
,下面是我的“想法”

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

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