You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Csaba Kozák edited this page Mar 16, 2016
·
22 revisions
Since AndroidAnnotations 2.1
SharedPreferences helpers allow you to use Android SharedPreferences, but in a typesafe manner, instead of using strings.
Defining the preferences
First, you should create an interface annotated with @SharedPref to define the SharedPreferences :
@SharedPrefpublicinterfaceMyPrefs {
// The field name will have default value "John"@DefaultString("John")
Stringname();
// The field age will have default value 42@DefaultInt(42)
intage();
// The field lastUpdated will have default value 0longlastUpdated();
}
Based on that specification, AndroidAnnotations builds a SharedPreferences Helper that has the same name plus an underscore. You can get an instance of the generated helper in any enhanced class with the @Pref annotation.
Important: The type of the field MUST be the generated class instead of the source class. It's the only exception in AA.
@EActivitypublicclassMyActivityextendsActivity {
@PrefvoidsetOnePref(MyPrefs_myPrefs){
// do something with myPrefs
}
voidsetMultiplePrefs(@PrefMyPrefs_myPrefs, @PrefAnotherPrefs_anotherPrefs){
// do something with myPrefs and anotherPrefs
}
}
You can then start using it:
// Simple editmyPrefs.name().put("John");
// Batch editmyPrefs.edit()
.name()
.put("John")
.age()
.put(42)
.apply();
// Preference clearing:myPrefs.clear();
// Check if a value exists:booleannameExists = myPrefs.name().exists();
// Reading a valuelonglastUpdated = myPrefs.lastUpdated().get();
// Reading a value and providing a fallback default valuelongnow = System.currentTimeMillis();
longlastUpdated = myPrefs.lastUpdated().getOr(now);
Default resource value
Since AndroidAnnotations 3.0
It's now possible to inject a default value from Android resources with @DefaultRes:
@SharedPrefpublicinterfaceMyPrefs {
@DefaultRes(R.string.defaultPrefName)
StringresourceName();
@DefaultRes// uses 'R.string.defaultPrefAge' to set default valueStringdefaultPrefAge();
}
String resource as preference key
Since AndroidAnnotations 3.1
You can specify a String resource by its id to be used as the preference key instead of the method name. This is useful when you specify your preferences in an xml file, and you use String resource keys there. Example:
Observe that you can name the shared preference by setting value to one of the following:
ACTIVITY, for a shared preference named MyActivity_MyPrefs;
ACTIVITY_DEFAULT, for a shared preference named MyActivity (also available through activity.getPreferences());
APPLICATION_DEFAULT, for the default SharedPreference or UNIQUE, for a shared preference named MyPrefs.
Therefore, if a single shared preference is needed for the interface defined, in order to all activities of a given application to share the same preferences, the following should be used:
publicstaticStringPREF_NAME = "MyPrefs";
// in onCreate// Using your MyPrefs values this.getPreferenceManager().setSharedPreferencesName(PREF_NAME);
// Opening the layout addPreferencesFromResource(R.xml.prefs);