getPreferences gibt immer den Standardwert @ zurü

Ich habe ein @ eingerichtPreferenceFragment mit zwei booleschen Einstellungen. DasFragment funktioniert einwandfrei und die Einstellungen werden gespeichert, wenn die App geschlossen und erneut geöffnet wird. Ich habe jedoch Probleme beim Versuch, diese Werte zu lesen. Es wird nur der Standardwert zurückgegeben. Wenn ich im @ debuggetBoolean Methode vonSharedPreferences Ich sehe, dass die lokaleHashMap hat die Größe 0, daher wird der Standardwert wie folgt zurückgegeben:

public boolean getBoolean(String key, boolean defValue) {
    synchronized (this) {
        awaitLoadedLocked();
        Boolean v = (Boolean)mMap.get(key); // <-- mMap is of size 0: return defValue
        return v != null ? v : defValue;
    }
}

Ich finde das seltsam, da die Präferenzwerte offensichtlich richtig gespeichert und in das @ geladen werdePreferenceFragment. Was vermisse ich

ImActivity.onCreate():

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

res / xml / preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:key="mm_preferences_category_recipe_preferences"
        android:title="@string/mm_preferences_category_recipe_preferences_title" >
        <CheckBoxPreference
            android:key="@string/mm_preferences_numbers_as_fractions_key"
            android:title="@string/mm_preferences_numbers_as_fractions_title"
            android:summary="@string/mm_preferences_numbers_as_fractions_summary"
            android:defaultValue="true" />
        <CheckBoxPreference
            android:key="@string/mm_preferences_comma_as_decimal_separator_key"
            android:title="@string/mm_preferences_comma_as_decimal_separator_title"
            android:summary="@string/mm_preferences_comma_as_decimal_separator_summary"
            android:defaultValue="true" />
    </PreferenceCategory>
</PreferenceScreen>

MyPreferenceFragment class:

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

enn Sie dies an einer beliebigen Stelle in der App tun, werden nur die Standardwerte (in beiden Fällen true) zurückgegeben, obwohl dasPreferenceFragment zeigt an, dass die Werte auf false gesetzt sind (falls ja):

boolean foo = getPreferences(Context.MODE_PRIVATE).getBoolean(getString(R.string.mm_preferences_numbers_as_fractions_key), true);
boolean bar = getPreferences(Context.MODE_PRIVATE).getBoolean(getString(R.string.mm_preferences_comma_as_decimal_separator_key), true);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage