私はAndroidアプリの開発にかなり慣れていないので、単純な初心者の間違いを犯しているかもしれませんが、ここに私の問題があります.2つの単純なアクティビティ、MainActivityとSettingActivityがあります。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>
その設定を選択すると、配列で定義されているすべてのエントリを含むリストが表示されます。複数のエントリを選択でき、ダイアログを確認すると、値は実際には定義されたキーの下の SharedPreferences に保存されます。しかし、Preference を再度表示すると、以前に選択したアイテムが選択済みとして表示されますが、値は 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>()));
}
しかし、値は明らかにこの時点ですでに消去されています。