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