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