German Probleme mit StateManager

mw71

Active Member
Licensed User
Longtime User
Guten Morgen,

nach dem mich das Forum nun schon ein gutes Stück vorangebracht hat, habe ich nun das nächste Problem.

Nachdem ich es nun geschafft habe, das die Tabelle angezeigt wird, (https://www.b4x.com/android/forum/threads/tabelle-erstellen-und-füllen.59300/#post-373610) habe ich ein Problem damit das Android die (Main) Activity der App Pausiert und neu Startet wenn ich das Telefon drehe.

Wie ich nun im Tutorial gelesen habe muss ich mich darum kümmern das in Activity_Pause alles gesichert wird und dann bei Activity_Resume wieder hergestellt wird. Irgend wie komm ich das nicht hin :-(

Ich habe mir StateManager eingefügt, auch wie hier beschrieben auf die Panels erweitert, klappt aber trotzdem nicht.
https://www.b4x.com/android/forum/threads/tabhost-statemanager-problem.13551/

Hier mal mein Code dazu:

B4X:
'Variablen
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim Panel1, Panel2, Panel3, Panel4 As Panel
    Dim ListPanel As List

    Dim tblAusgabe As Table
    Dim WebView1 As WebView


'.....
end sub

'Main Programm
    If FirstTime Then StateManager.ResetState("main")

    Activity.AddMenuItem("Options","mnuOptions")
    Activity.AddMenuItem("Über","mnuInfo")
   
    varFirstRun=False

    Panel1.Initialize("") : Panel1.Visible = False
    Panel2.Initialize("") : Panel2.Visible = False
    Panel3.Initialize("") : Panel3.Visible = False
    Panel4.Initialize("") : Panel4.Visible = False
    WebView1.Initialize("WebView1") : WebView1.Visible =False
    Activity.AddView(Panel1, 0, 0, 100%x, 100%y)
    Activity.AddView(Panel2, 0, 0, 100%x, 100%y)
    Activity.AddView(Panel3, 0, 0, 100%x, 100%y)
    Activity.AddView(Panel4, 0, 0, 100%x, 100%y)
    Activity.AddView(WebView1, 0, 0, 100%x, 100%y)
    Panel1.LoadLayout("Log")
    Panel2.LoadLayout("Info")
    Panel3.LoadLayout("Setup")
    Panel4.LoadLayout("Leer")
    tblAusgabe.Initialize(Me, tblAusgabe,1,Gravity.LEFT , True)               '1 weil mit LoadFromCSV geladen wird (siehe Beschreibung zum Befehl in der Class)
    tblAusgabe.CellAlignment = Bit.OR(Gravity.LEFT, Gravity.CENTER_VERTICAL)
    tblAusgabe.HeaderColor = Colors.Blue
    tblAusgabe.HeaderTextColor = Colors.Yellow
    tblAusgabe.TableColor = Colors.Black
    tblAusgabe.RowHeight = 30dip
    tblAusgabe.AllowSelection = False
    tblAusgabe.AddToActivity(Panel4, 0, 0, 100%x, 100%y)
    'tblAusgabe.AddToView(Panel4,0,0,100%x,100%y)

    tblAusgabe.MultiSelect = False
    tblAusgabe.SortColumn = False
    tblAusgabe.SingleLine = False
   
    Panel1.Visible = True

    ListPanel.Initialize
    ListPanel.Add(Panel1)
    ListPanel.Add(Panel2)
    ListPanel.Add(Panel3)
    ListPanel.Add(Panel4)

'weiterer Code.....

end Sub

Sub Activity_Resume
    StateManager.loadStateFile
    StateManager.RestoreState(Activity,"Main",0,ListPanel)    '0 für unbegrenzt, ansonsten in Min?!!
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    If UserClosed Then
        StateManager.ResetState("Main")
    Else
        StateManager.SaveState(Activity, "Main",ListPanel)
    End If
    StateManager.SaveSettings
End Sub

Ich hoffe mal ihr könnt mir weiter helfen. Danke.
 

DonManfred

Expert
Licensed User
Longtime User
Wie ich nun im Tutorial gelesen habe muss ich mich darum kümmern das in Activity_Pause alles gesichert wird und dann bei Activity_Resume wieder hergestellt wird.
Naja. Du kannst den status von einfachen Dingen speichern (z.b. ob eine checkbox gerade aktiv ist. Oder welcher Radiobutton aktiv ist.

Den Inhalt von komplexen Dingen (wie eine Tabelle oder der Inhalt einer Listview z.B. kannst Du NICHT zwischenspeichern.
Du musst die Tabelle/Listview neu aufbauen und befüllen. Oder in dem Fall dein ListPanel.
 

mw71

Active Member
Licensed User
Longtime User
Hallo Manfred,

Danke für die Infos.
Ich habe es jetzt so gelöst, das ich bei Pause den Visible Status der Panels in Variablen speichere, diese werden Problemlos durch den StateManage gespeichert.
Bei Resume setzte ich nun die Visible Eigenschaft wieder aus diesen Variablen, klappt problemlos. Auch die Tabelle bekomme ich nun neu gezeichnet.
 
Top