getPreferences sempre retorna o valor padrão
Eu montei umPreferenceFragment
com duas preferências booleanas. oFragment
funciona bem e as configurações são armazenadas quando o aplicativo é fechado e reaberto. No entanto, estou tendo problemas ao tentar ler esses valores; somente o valor padrão é retornado. Se eu depurar nogetBoolean
método deSharedPreferences
Eu vejo que o localHashMap
é do tamanho 0, portanto, o valor padrão é retornado, assim:
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;
}
}
Acho isso estranho, pois os valores de preferência são obviamente armazenados e carregados corretamente noPreferenceFragment
. o que estou perdendo?
NoActivity.onCreate()
:
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
res / xml / preferências.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>
MinhasPreferenceFragment
classe:
public class MiasMatPreferencesFragment extends PreferenceFragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
Agora, fazendo isso em qualquer lugar do aplicativo, retorna apenas os valores padrão (verdadeiro nos dois casos), mesmo que oPreferenceFragment
mostra que os valores estão configurados para false (se houver):
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);