相关疑难解决方法(0)

MultiSelectListPreference不存储值?

我是Android App开发的新手,所以也许我只是犯了一个简单的新手错误,但这是我的问题:我有2个简单的活动,MainActivity和SettingsActivity.在MainActivity中,我有一个显示SettingsActivity的按钮.在SettingsActivity中,我包含一个PreferenceFragment SettingsFragment,并在Activity的底部显示一个ButtonBar.在SettingsFragment中,我有一个MultiSelectListPreference定义如下:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory 
        android:title="@string/title_schedule_settings">

        <MultiSelectListPreference
            android:key="@string/key_list_schedule"
            android:title="@string/title_schedule_list"
            android:dialogTitle="@string/title_schedule_list"
            android:entries="@array/list_weekdays"
            android:entryValues="@array/list_weekdays"
            android:defaultValue="@array/empty_list"
            android:persistent="true"/>
    </PreferenceCategory>

</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

现在,当我选择Preference时,它会显示包含数组中定义的所有条目的列表,我可以选择多个条目,当我确认对话框时,值实际上存储在已定义键下的SharedPreferences中.但是,如果我现在再次显示Preference它会显示我之前选择的项目,但是这些值不再存储在SharedPreferences中,并且经过一些摆弄后我必须意识到SharedPreferences中的值显然会被删除显示对话框.

所以现在我的问题是:这是正常/预期的行为还是这个错误?我该如何解决这个问题?我已经尝试自己实现MultiSelectListPreference并覆盖onPrepareDialogBu​​ilder方法,就像这样

@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder)
{
    super.onPrepareDialogBuilder(builder);

    Log.i("mmslp", Arrays.deepToString(PreferenceManager.getDefaultSharedPreferences(getContext()).getStringSet(getKey(), new HashSet<String>()).toArray()));
    setValues(PreferenceManager.getDefaultSharedPreferences(getContext()).getStringSet(getKey(), new HashSet<String>()));
}
Run Code Online (Sandbox Code Playgroud)

但是在这一点上,这些价值显然已经消失了.

android

2
推荐指数
1
解决办法
1961
查看次数

标签 统计

android ×1