StateManager ist ein Codemodul das sich um die Handlung der UI (User Interface) Zustände und Einstellungen kümmert.
Einstellungen
Einstellungen sind im Programm einstellbare Parameter. Diese Einstellungen sollten permanent erhalten werden.
Die Methoden zur Behandlung der Einstellungen sind sehr einfach:
StateManager.GetSetting (Key As String) As String: gibt die Werte zurück die mit dem gegebenen Schlüsselwort verbunden sind. Ein leerer String wird zurück gegeben wenn das Schlüsselwort (Key) nicht zur Verfügung steht. Die Einstellungen werden von einer Datei geladen wenn sie vorher nicht schon geladen wurden.
StateManager.GetSetting2 (Key As String, DefaultValue As String) As String: Ähnlich wie GetSetting. Die Default-Werte werden zurück gegeben falls das Schlüsselwort nicht gefunden wurde.
StateManager.SetSetting(Key As String, Value As String): Verbindet die gegebenen Werte mit den gegebenen Schlüsselworten. Beachten Sie, dass es nicht nötig ist SaveSettings nach jedem SetSetting aufzurufen.
StateManager.SaveSettings: Speichert die Einstellungen in eine Datei. Normalerweise wird diese Methode in Activity_Pause aufrufen.
UI State
Der UI state (Userer Interface state) 'Benutzerschnittstelle Zustand' ist etwas interessanter. In manchen Fällen wird Android die aktuelle Activity zerstören und, wenn nötig, neu erstellen. Das kommt vor wenn der Benutzer, zum Beispiel, die Bildschirmorientierung ändert. Falls der Benutzer einen Text in eine EditText eingegeben hat wollen wir dass dieser beibehalten wird. Also anstatt dass wir das UI neu erstellen, speichern wir dessen Zustand und holen ihn dann wieder zurück.
Nicht Alle Elemente werden gespeichert. Nur die Elemente die der Benutzer genutzt hat (EditText Texte, Spinner gewählter Eintrag, SeekBar Wert...).
Die Benutzung von StateManager macht die Behandlung des UI-Zustandes einfach:
Wenn die Activity geschlossen (paused) wird, testen wir ob der Benutzer sie geschlossen hat (Druck auf die Back-Taste). In diesem Fall wird der Zustand zurück gesetzt. Der Stringparameter ist der Name der Activity. StateManager kann den Zustand von mehreren Activities verwalten, deshalb wird der Name zur Unterscheidung der Activities benutzt.
Wenn UserClosed=False ist, dann speichern wir den Zustand.
Die Einstellungen in beiden Fällen gespeichert.
Wenn die Activity erneuert wird (resumes) rufen wir StateManager.RestoreState auf. Der letzte Parameter ist Gültigkeitsperiode für diesen Zustand. Der Zustand wird nicht geladen wenn mehr als die vorgegeben Minuten verlaufen sind. '0' eingeben für eine unbestimmte Zeitspanne.
RestoreState gibt einen boolschen Wert zurück. True wenn der Zustand geladen wurde. Wenn der Zustand nicht geladen wurde ist Ihre Verantwortung die Defaultwerte zu setzen. Das ist der Fall wenn der Benutzer das Programm das erste mal startet.
Um StateManager zu benutzen muss man im Menü 'Project - Add Existing Module' wählen und die StateManager.bas Datei einfügen, diese ist im beigelegten Beispiel inbegriffen. Sie müssen auch die RandomAccessFile Library referenzieren (im IDE ankreuzen).
Beiliegende Dateien:
StateManager.zip
Einstellungen
Einstellungen sind im Programm einstellbare Parameter. Diese Einstellungen sollten permanent erhalten werden.
Die Methoden zur Behandlung der Einstellungen sind sehr einfach:
StateManager.GetSetting (Key As String) As String: gibt die Werte zurück die mit dem gegebenen Schlüsselwort verbunden sind. Ein leerer String wird zurück gegeben wenn das Schlüsselwort (Key) nicht zur Verfügung steht. Die Einstellungen werden von einer Datei geladen wenn sie vorher nicht schon geladen wurden.
StateManager.GetSetting2 (Key As String, DefaultValue As String) As String: Ähnlich wie GetSetting. Die Default-Werte werden zurück gegeben falls das Schlüsselwort nicht gefunden wurde.
StateManager.SetSetting(Key As String, Value As String): Verbindet die gegebenen Werte mit den gegebenen Schlüsselworten. Beachten Sie, dass es nicht nötig ist SaveSettings nach jedem SetSetting aufzurufen.
StateManager.SaveSettings: Speichert die Einstellungen in eine Datei. Normalerweise wird diese Methode in Activity_Pause aufrufen.
UI State
Der UI state (Userer Interface state) 'Benutzerschnittstelle Zustand' ist etwas interessanter. In manchen Fällen wird Android die aktuelle Activity zerstören und, wenn nötig, neu erstellen. Das kommt vor wenn der Benutzer, zum Beispiel, die Bildschirmorientierung ändert. Falls der Benutzer einen Text in eine EditText eingegeben hat wollen wir dass dieser beibehalten wird. Also anstatt dass wir das UI neu erstellen, speichern wir dessen Zustand und holen ihn dann wieder zurück.
Nicht Alle Elemente werden gespeichert. Nur die Elemente die der Benutzer genutzt hat (EditText Texte, Spinner gewählter Eintrag, SeekBar Wert...).
Die Benutzung von StateManager macht die Behandlung des UI-Zustandes einfach:
B4X:
Sub Activity_Resume
If StateManager.RestoreState(Activity, "Main", 60) = False Then
'set the default values
EditText1.Text = "Default text"
EditText2.Text = "Default text"
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
If UserClosed Then
StateManager.ResetState("Main")
Else
StateManager.SaveState(Activity, "Main")
End If
StateManager.SaveSettings
End Sub
Wenn UserClosed=False ist, dann speichern wir den Zustand.
Die Einstellungen in beiden Fällen gespeichert.
Wenn die Activity erneuert wird (resumes) rufen wir StateManager.RestoreState auf. Der letzte Parameter ist Gültigkeitsperiode für diesen Zustand. Der Zustand wird nicht geladen wenn mehr als die vorgegeben Minuten verlaufen sind. '0' eingeben für eine unbestimmte Zeitspanne.
RestoreState gibt einen boolschen Wert zurück. True wenn der Zustand geladen wurde. Wenn der Zustand nicht geladen wurde ist Ihre Verantwortung die Defaultwerte zu setzen. Das ist der Fall wenn der Benutzer das Programm das erste mal startet.
Um StateManager zu benutzen muss man im Menü 'Project - Add Existing Module' wählen und die StateManager.bas Datei einfügen, diese ist im beigelegten Beispiel inbegriffen. Sie müssen auch die RandomAccessFile Library referenzieren (im IDE ankreuzen).
Beiliegende Dateien: