SharedPreferences不自动保存?

时间:2016-12-24 20:07:53

标签: java android sharedpreferences android-preferences

我的偏好值没有保存,每当我读取SharedPreferences文件时,它都会返回默认值;当用户做出选择时(例如在ListPreference中选择一个选项),系统应该自动处理更改,因此我不知道为什么在我的应用程序中没有发生这种情况。

根据google

“当用户更改设置时,系统会为您更新SharedPreferences文件中的相应值。您应该直接与关联的SharedPreferences文件进行交互的时间是您需要读取值以便根据用户的设置确定应用的行为。“

我是否应该操纵SharedPreference.Editor中的OnSharedPreferenceChangeListener个实例,或者我还需要做些什么才能使用户设置值保持不变?

代码中的问题:由于这种误解,我的代码不会保留用户设置值(当我在MainActivity的OnCreate中读取SharedPreference文件时,始终会选择默认值)。就像现在一样,在我的“首选项”菜单“视图”中选择的按钮在应用程序重新启动时仍然存在,但似乎在此菜单中选择一个选项不会将键值保存到SharedPreferences文件中。

我需要做什么才能使用户在我的ListPreference中设置的值保持不变?

MainActivity

 public class MainActivity extends FragmentActivity {
        private static int prefWoodColor;   //saved pref variable for OpenGL neck texture
        private SharedPreferences settings;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            ...
            //Restore preferences
            settings = PreferenceManager.getDefaultSharedPreferences(this);
            prefWoodColor = Integer.parseInt(settings.getString(this.KEY_PREF_WOOD_TYPE, "Maple")); 
            ...
        }
    }

偏好设置活动

public class FragmentSettingsMenu extends com.takisoft.fix.support.v7.preference.PreferenceFragmentCompat {
    private SharedPreferences.OnSharedPreferenceChangeListener listener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from the XML resource
        addPreferencesFromResource(R.xml.preferences);
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                if (key.equals("pref_wood")) {
                    Preference woodPref = findPreference(key);
                    String color = woodPref.getSharedPreferences().getString(key, "Maple");
                    //Should I be calling edit.apply() logic here? 
                }
            }
        };
    }
    ...

}

的preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    android:title="Settings"
    <ListPreference
        android:key="pref_wood"
        android:title="@string/pref_wood"
        android:dialogTitle="@string/pref_wood"
        android:entries="@array/pref_wood_entries"
        android:entryValues="@array/pref_wood_values"
        android:defaultValue="@string/pref_wood_default" />
</PreferenceScreen>

的strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">MyApp</string>
    <string name="dummy_button">Dummy Button</string>
    <string name="dummy_content">DUMMY\nCONTENT</string>

     <!--Preference Menu Strings-->
    <string name="pref_wood">Wood Style</string>
    <string-array name="pref_wood_entries">
        <item>"Maple"</item>
        <item>"Cedar"</item>
        <item>"Oak"</item>
    </string-array>
    <string-array name="pref_wood_values">
        <item >0</item>
        <item >1</item>
        <item >2</item>
    </string-array>
    <string name="pref_wood_default">Maple</string>
</resources>

1 个答案:

答案 0 :(得分:0)

系统会自动保存更改!