getPreferences siempre devuelve el valor predeterminado

He establecido unPreferenceFragment con dos preferencias booleanas. losFragment funciona bien y la configuración se almacena cuando la aplicación se cierra y se vuelve a abrir. Sin embargo, tengo problemas al intentar leer estos valores; solo se devuelve el valor predeterminado. Si me depuro en elgetBoolean método deSharedPreferences Veo que el localHashMap es de tamaño 0, por lo tanto, se devuelve el valor predeterminado, como este:

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;
    }
}

Encuentro esto extraño ya que los valores de preferencia obviamente se almacenan y cargan correctamente en elPreferenceFragment. ¿Qué me estoy perdiendo?

EnActivity.onCreate():

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

res / xml / preferencias.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>

MiPreferenceFragment clase:

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

Ahora, al hacer esto en cualquier lugar de la aplicación, solo devuelve los valores predeterminados (verdadero en ambos casos), aunque elPreferenceFragment muestra que los valores están establecidos en falso (si es así):

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);

Respuestas a la pregunta(1)

Su respuesta a la pregunta