Я довольно новичок в разработке Android-приложений, поэтому, возможно, я просто делаю простую ошибку новичков, но вот моя проблема: У меня есть 2 простых действия, MainActivity и SettingsActivity. В MainActivity у меня есть кнопка, которая отображает SettingsActivity. В разделе «Параметры настройки» я включаю параметр «Параметры предпочтений» и отображает ButtonBar в нижней части «Активность». В SettingsFragment у меня MultiSelectListPreference определяется следующим образом: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>
Теперь, когда я выбираю, что предпочтение она показывает мне список всех записей, как определено в массиве, можно выбрать несколько записей, и когда я подтвердить диалог значения фактически хранятся в SharedPreferences под определенным ключом. Но если теперь я снова покажу «Предпочтение», он покажет мне ранее выбранные элементы как выбранные, но значения больше не сохраняются в SharedPreferences, и после некоторого разворачивания я должен был понять, что значения в SharedPreferences, по-видимому, стираются, как только отображается диалог.
Итак, теперь мои вопросы: это нормальное/предполагаемое поведение или это ошибка? И как я могу обойти это? Я уже пытался сделать свою собственную реализацию MultiSelectListPreference и переопределить метод onPrepareDialogBuilder как этот
@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>()));
}
, но значения, по-видимому стер уже на данный момент.