Android-Programmierung GUI: Shared Preferences und Einstellungsdialoge
Willemers Informatik-Ecke

Daten in SharedPreferences speichern

SharedPreferences ähneln der Java-Map oder noch eher den Java-Properties. Über einen Schlüssel können Daten abgelegt und wiedergeholt werden. Darüberhinaus lassen sich die Daten leicht persistieren.

Aus dem Context (also Activity oder Fragment) können Sie über die Methode getSharedPreferences eine SharedPreferences erlangen. Als Parameter geben Sie einen String mit einem eindeutigen Namen an.

Für Änderungen benötigen Sie noch einen Editor, den Sie über die Methode edit erlangen. Er erlaubt durch put-Methoden den Eintrag von Werten:

SharedPreferences pref = getSharedPreferences("MYAPPKEY", 0);
SharedPreferences.Editor ed = pref.edit();
ed.putInt("PUNKTE", 12);
ed.commit();
Der erste Parmaeter jeder put-Methode ist der Schlüssel, der zweite der Wert. Für die Standard-Typen gibt es spezialisierte Methoden. Zum Speichern der Daten rufen Sie commit auf, der den Thread bis zum Erfolg blockiert und dann true zurückgibt. Alternativ verwenden Sie apply. So läuft der I/O auf einem separaten Thread und blockiert nicht die Anwendung.

Daten auslesen

Wenn Sie die SharedPreference zurückholen wollen, müssen Sie wiederum erst die Methode getSharedPreferences mit dem Namen aufrufen. Hier verwenden Sie get-Methoden, die den Wert zurückgeben und den Schlüssel als Parameter erwarten.
SharedPreferences pref = getSharedPreferences("MYAPPKEY", 0);
int punkte = pref.getInt("PUNKTE");

Einstellungsdialoge

Vorbereitung in der build.gradle-Datei

Um die Preference Support Library zu verwenden, müssen Sie sie in der build.gradle des Programmmoduls hinzufügen, unter Android Studio über Build|Edit Libraries und Dependencies.
dependencies {
   ...
   implements "com.android.support:preference-v7:yy.z"
}
Die Versionsnummer yy.z hinter dem Doppelpunkt muss bei allen Dependencies aus com.android.support vollständig gleich sein, sonst lässt sich Gradle nicht synchronisieren.

XML definiert den PreferenceScreen

Das Layout für die Einstellungsdialoge wird wie jedes Layout in XML als rPpreferenceScreen definiert. Das Layout definiert Die Layout-XML-Datei für den PreferenceScreen liegt nicht unter res/layout sondern unter res/xml. Um den Einstellungsdialog aus dem Programm zu steuern, wird ein PreferenceFragment bzw. ein PreferenceFragmentCompat verwendet, aus dem das preferenceScreen-Layout entfaltet wird. Ein PreferenceFragment kann nicht einer normalen Activity hinzugefügt werden, sondern muss Bestandteil einer PreferenceActivity sein. Allerdings kann eine PreferenceFragmentCompat der Preference Support Library jeder Activity zugeordnet werden.