SharedPreferences未使用PreferenceActivity保存

时间:2015-04-05 19:19:24

标签: android android-preferences preferenceactivity

我试图创建一个非常基本的偏好活动,扩展PreferenceActivity。在documentation中,我读到了:

  

当用户进行更改时,PreferenceActivity会自动保留与每个Preference相关联的设置。

然而,当我:

  • 更改设置(任何设置)
  • 关闭应用
  • 从最近使用的列表中删除应用
  • 重新启动应用

设置被重置为默认值,这似乎与上面引用的文档冲突。我是否误解了某些内容,模板是否有问题,或者我是否需要其他权限或其他设置才能使用PreferenceActivity自动持久功能?

public class SettingsActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment()).commit();
    }

    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}

preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <ListPreference
        android:key="pref_language_reading"
        android:title="@string/pref_title_language_dailyreading"
        android:entries="@array/pref_languages_dailyreading_entries"
        android:entryValues="@array/pref_languages_dailyreading_values"
        android:defaultValue="@string/pref_language_dailyreading_default" 
        android:persistent="true" />
</PreferenceScreen>

字符串和数组存在,我可以正确选择一种语言。当我转到另一个活动,然后返回时,保存该设置。但关闭应用并重新启动会丢弃保存的值。

当我读出与此首选项对应的SharedPreference时(重新启动之前),我看到了正确的设置。重新启动后,SharedPreference不再存在。

1 个答案:

答案 0 :(得分:0)

代码应该有效。您的代码中可能还有其他内容会导致此行为。

在我的具体案例中,结果发现有一行

PreferenceManager.getDefaultSharedPreferences(this).edit().clear().commit();

在主onCreate()的{​​{1}}方法中,在每次启动应用时导致SharedPreferences 清除